This repository has been archived on 2024-04-08. You can view files and clone it, but cannot push or open issues or pull requests.
redir/includes/kohana/modules/minion/miniond
2013-04-13 16:36:38 +10:00

68 lines
1.6 KiB
Bash

#!/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