2013-02-19 2 views
0

Я пытаюсь использовать планировщик resque, но я не мог найти хороший способ контролировать процесс. Я хочу, чтобы убить задание планировщика после любого развертывания и позволить upstart перезапустить его. Я написал сценарий Capistrano, чтобы убить Resque-планировщикresque scheduler upstart

task :stop_scheduler => :environment do 
     pidfile = Rails.root + "tmp/pids/resque_scheduler.pid" 
     if File.exists?(pidfile) 
     pid = File.read(pidfile).to_i 
     syscmd = "kill -s QUIT #{pid}" 
     puts "Running syscmd: #{syscmd}" 
     system(syscmd) 
     FileUtils.rm_f(pidfile) 
     else 
     puts "****WARNING**** Scheduler pid file has not been found. Was scheduler running??" 
    end 
    end 

На данный момент выскочка будет перезапустить его. Моя проблема, вероятно, с upstart conf. Мне нужно, чтобы Шдулер писал PID в tmp/pids/resque_scheduler.pid, чтобы убить его при следующем перезапуске.

Вот моя выскочка конф важные части:

respawn 
respawn limit 99 5 
console none 

script 
su -c "source 'cd /myapp/; RAILS_ENV={env} bundle exec rake resque:scheduler BACKGROUND=yes PIDFILE=./tmp/pids/resque_scheduler.pid >> ~/resque_workers.log 2>&1" my_user 
end script 

Использования такого рода конф у меня есть эффект, что планировщик вилы другое время и ИДП я написал на моей PidFile не является правильными. Я заканчиваю процесс, который постоянно возрождается и что я больше не могу убивать.

Любое предложение?

ответ

0

Это старая, но вы проверили: http://upstart.ubuntu.com/cookbook/#expect

В принципе, вы должны сказать выскочка, сколько раз в вилы - в вашем случае, я полагаю, вы бы добавить expect fork в свой выскочка конфигурационный файл, так как су - c будет вилка один раз (вы бы использовали expect daemon, если ваш скрипт раздвоен дважды).

0

У меня была такая же проблема, и я понял, что мне нужно удалить флаг BACKGROUND = yes.

Я определил это, просмотрев число моих вилок, которое было более 2 и просто продолжало расти. См. http://upstart.ubuntu.com/cookbook/#how-to-establish-fork-count для получения информации о том, как это сделать.

Я удалил ПРЕДПОСЫЛКИ = да как тест, и это сработало. Я думаю, что это происходит из-за того, что выскочка автоматически запускает задачу в фоновом режиме и не только инструктирует ее работать в фоновом режиме ненужной, но и приводит к запутыванию и запуску новых процессов.

После того, как я удалил BACKGROUND = да, результат «как установить число вилки», указанное выше было 2, а это означает, что это демон, и, таким образом вы будете нуждаться в этом в вашей выскочке сценария:

ожидать daemon

Смежные вопросы