Created
June 22, 2011 15:48
-
-
Save denmarkin/1040395 to your computer and use it in GitHub Desktop.
monit + resque management (from @Mindwork)
This file contains 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/sh | |
# wrapper to daemonize rake tasks: see also http://mmonit.com/wiki/Monit/FAQ#pidfile | |
usage() { | |
echo "usage: ${0} [start|stop] name target [arguments]" | |
echo "\tname is used to create or read the log and pid file names" | |
echo "\tfor start: target and arguments are passed to rake" | |
echo "\tfor stop: target and arguments are passed to kill (e.g.: -n 3)" | |
exit 1 | |
} | |
[ $# -lt 2 ] && usage | |
cmd=$1 | |
name=$2 | |
shift ; shift | |
pid_file=./tmp/pids/${name}.pid | |
log_file=./log/${name}.log | |
case $cmd in | |
start) | |
if [ ${#} -eq 0 ] ; then | |
echo -e "\nERROR: missing target\n" | |
usage | |
fi | |
pid=`cat ${pid_file} 2> /dev/null` | |
if [ -n "${pid}" ] ; then | |
ps ${pid} | |
if [ $? -eq 0 ] ; then | |
echo "ensure process ${name} (pid: ${pid_file}) is not running" | |
exit 1 | |
fi | |
fi | |
echo $$ > ${pid_file} | |
exec 2>&1 rake $* 1>> ${log_file} ;; | |
stop) pid=`cat ${pid_file} 2> /dev/null` | |
[ -n "${pid}" ] && kill $* ${pid} | |
rm -f ${pid_file} ;; | |
*) usage ;; | |
esac |
This file contains 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
$LOAD_PATH.unshift File.dirname(__FILE__) + '/../lib' | |
require 'resque/tasks' | |
require 'resque_scheduler/tasks' | |
task "resque:setup" => :environment | |
namespace :resque do | |
desc 'start all background resque daemons' | |
task :start_daemons do | |
mrake_start "resque_scheduler resque:scheduler" | |
workers_config.each do |worker, config| | |
mrake_start "resque_#{worker} resque:work QUEUE=#{config['queues']} COUNT=#{config['count']}" | |
end | |
end | |
desc 'stop all background resque daemons' | |
task :stop_daemons do | |
sh "./script/monit_rake stop resque_scheduler" | |
workers_config.each do |worker, config| | |
sh "./script/monit_rake stop resque_#{worker} -s QUIT" | |
end | |
end | |
def self.workers_config | |
YAML.load(File.open(ENV['WORKER_YML'] || 'config/resque_workers.yml')) | |
end | |
def self.mrake_start(task) | |
environment = ENV['RAILS_ENV'] || 'production' | |
sh "nohup ./script/monit_rake start #{task} RAILS_ENV=#{environment} >> log/workers.log &" | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment