簡體   English   中英

Rufus-scheduler僅在生產時運行一次

[英]Rufus-scheduler only running once on production

我正在使用rufus-scheduler每天從rails服務器運行一個進程。 出於測試目的,讓我們說每5分鍾一次。 我的代碼看起來像這樣:

在config / initializers / task_scheduler.rb中

scheduler = Rufus::Scheduler::PlainScheduler.start_new
scheduler.every "10m", :first_in => '30s' do
 # Do stuff
end

我也嘗試過cron格式:

scheduler.cron '50 * * * *' do
 # stuff
end

例如,讓流程在每小時后50分鍾每小時運行一次。

真氣的部分是它在我的本地機器上工作。 該過程將定期運行並正常工作。 只有在我部署到生產的應用程序上,該進程才會運行一次,而不是重復。

ps faux顯示cron正在運行,乘客正在處理rails進程的啟動,該站點已被再次ping通,因此它知道它應該刷新,並且生產顯示代碼中的更改。 唯一不同的是,沒有警告或錯誤,計划任務不會重復。

救命!

將以下行添加到apache2 config /etc/apache2/apach2.conf並重新啟動Apache服務器

 RailsAppSpawnerIdleTime 0
 PassengerMinInstances 1

您可能不應該在rails服務器本身中運行rufus-scheduler,尤其是不能使用像passenger這樣的多進程框架。 相反,您應該在守護進程中運行它。

我對正在發生的事情的理論:

Passenger啟動一個ruby服務器進程並使用它來分叉其他服務器來處理請求。 但由於rufus-scheduler在主線程的單獨線程中運行其作業,因此rufus線程僅在原始ruby進程中處於活動狀態(ruby的fork只復制執行分叉的線程)。 這似乎是一件好事,因為它可以阻止多個調度程序運行,但是......乘客可能會在某些條件下殺死ruby進程 - 如果它殺死原始進程,則調度程序線程就會消失。

凱文是對的。

乘客殺死'不必要的'線程。

http://groups.google.com/group/rufus-ruby/search?group=rufus-ruby&q=passenger

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM