Created
July 27, 2011 01:25
-
-
Save zeelot/1108471 to your computer and use it in GitHub Desktop.
miniond (for long running minion tasks)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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. | |
# | |
# Usage: ./minion [task:name] [--option1=optval1 --option2=optval2] | |
# | |
# And so on. | |
# | |
# To get help, pass in --help | |
# | |
# # Minion general help | |
# ./minion --help | |
# ./minion | |
# | |
# # Task specific help | |
# ./minion task:name --help | |
# | |
# Define some functions | |
function handle_SIGHUP() | |
{ | |
echo "Restarting" | |
stop_daemon() | |
start_daemon() | |
} | |
function handle_SIGTERM_SIGINT() | |
{ | |
echo "Shutting Down" | |
exit stop_daemon() | |
} | |
function start_daemon() | |
{ | |
php index.php --uri=minion "$TASK" $ARGS & | |
pid=$! | |
return $pid; | |
} | |
function stop_daemon() | |
{ | |
kill -TERM $pid | |
# Wait for the task to exit and store the exit code | |
wait $pid | |
ecode=$? | |
# Return exit code | |
return $ecode | |
} | |
# Register signal handlers | |
trap handle_SIGHUP SIGHUP | |
trap handle_SIGTERM_SIGINT SIGTERM SIGINT | |
# Parse arguements | |
if [[ $# > 0 && $1 != --* ]] | |
then | |
TASK="--task=$1" | |
shift 1 | |
ARGS=$@ | |
fi | |
start_daemon() | |
while : | |
do | |
# Pauses the script until $pid is dead | |
wait $pid | |
# Make sure someone didn't start it back up already | |
if ! kill -0 $pid > /dev/null 2>&1 | |
then | |
start_daemon() | |
fi | |
done |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment