1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- #!/bin/bash
- #
- # This script is similar to minion but will do a few additional things:
- # - PHP process is run in the background
- # - PHP process is monitored and restarted if it exits for any reason
- # - Added handlers for SUGHUP, SIGINT, and SIGTERM
- #
- # This is meant for long running minion tasks (like background workers).
- # Shutting down the minion tasks is done by sending a SIGINT or SIGTERM signal
- # to this miniond process. You can also restart the minion task by sending a
- # SUGHUP signal to this process. It's useful to restart all your workers when
- # deploying new code so that the workers reload their code as well.
- # You cannot use this script for tasks that require user input because of the
- # PHP process running in the background.
- #
- # Usage: ./miniond [task:name] [--option1=optval1 --option2=optval2]
- #
- # And so on.
- #
- # Define some functions
- function start_daemon()
- {
- echo "Starting"
- ./minion $ARGS & # This assumes miniond is sitting next to minion
- pid=$! # Store pid (globally) for later use..
- }
- function stop_daemon()
- {
- kill -TERM $pid
- wait $pid # Wait for the task to exit and store the exit code
- ecode=$? # Store exit code (globally) for later use..
- }
- function handle_SIGHUP()
- {
- echo "Restarting"
- stop_daemon
- start_daemon
- }
- function handle_SIGTERM_SIGINT()
- {
- echo "Shutting Down"
- stop_daemon
- exit $ecode
- }
- # Register signal handlers
- trap handle_SIGHUP SIGHUP
- trap handle_SIGTERM_SIGINT SIGTERM SIGINT
- ARGS=$@
- start_daemon
- while :
- do
- # Pauses the script until $pid is dead
- wait $pid
- # Make sure someone didn't start it back up already (SIGHUP handler does this)
- if ! kill -0 $pid > /dev/null 2>&1
- then
- start_daemon
- fi
- done
|