2013-02-19 34 views
0

我正在嘗試使用resque scheduler,但我無法找到一個很好的方法來監視該進程。 我想要的是在任何部署後終止調度程序作業,並讓其重新啓動它。 我寫了一個腳本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 

此時新貴將重新啓動它。 我的問題可能是與新貴conf。我需要Schduler在tmp/pids/resque_scheduler.pid中寫入PID,以便能夠在下次重新啓動時將其終止。

這裏是我的暴發戶的conf重要的部分:

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 PID是不正確的效果。我結束了一個不斷重生的過程,我不能再殺了。

有什麼建議嗎?

回答

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 = yes作爲一個測試,它工作。我認爲這是因爲暴發戶在後臺自動啓動任務,不僅是指示它在後臺運行不必要,而且會導致新手混淆並不斷產生新進程。

一旦我刪除背景= yes,則「如何建立叉數」爲2上面提到的,這意味着它是一個守護進程,因此你需要這在你的新貴腳本的結果:

期待守護進程

相關問題