diff --git a/application/classes/Task/Ping.php b/application/classes/Task/Ping.php index db4c37b..0e74de2 100644 --- a/application/classes/Task/Ping.php +++ b/application/classes/Task/Ping.php @@ -128,7 +128,7 @@ protected function _process() // Initialize Redis $redis = PingApp_Redis::factory(); - $max_items = 20; // Max items to process per run + $max_items = 50; // Max items to process per run for ($i=0; $i < $max_items; $i++) { diff --git a/miniond b/miniond new file mode 100755 index 0000000..c5c4220 --- /dev/null +++ b/miniond @@ -0,0 +1,68 @@ +#!/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 \ No newline at end of file