Skip to content

Instantly share code, notes, and snippets.

@zeelot
Created July 27, 2011 01:25
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save zeelot/1108471 to your computer and use it in GitHub Desktop.
Save zeelot/1108471 to your computer and use it in GitHub Desktop.
miniond (for long running minion tasks)
#!/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