![](/img/trans.png)
[英]How can one set up Chef Recipes with delayed_job to spawn multiple workers?
[英]Ruby How to create daemon process that will spawn multiple workers
我有一個名為“ worker.rb”的腳本。 當運行時,此腳本將執行一段時間(可以說一個小時),然后死亡。
我需要另一個腳本來負責生成上面的工作程序腳本。 我們將此腳本稱為“ runner.rb”。 “ runner.rb”將被調用,並帶有一個參數,該參數決定允許它產生多少個工人。
我希望Runner.rb執行以下操作:(例如'rubyRunner.rb 5')-查詢數據庫中的特定值(例如獲得100個值)-生成'worker.rb'的5個實例(傳遞前5個)值)-繼續檢查上面產生的任何'worker.rb'實例是否完成,然后使用數據庫中的第6個值再次調用'worker.rb',並無限期地繼續此過程。
我正在使用Daemons gem,但是迷失了它,這是最好的解決方法。 'runner'腳本肯定應該被守護-但是worker也應該被守護嗎?
“跑步者”應該如何檢查“工人”是否完成? 可以使用存儲在文件中的PID來完成此操作嗎?
我以前用過Daemons寶石。 但是以某種方式,在保持子進程數量方面做得不好。 然后,我制作了另一個名為light_daemon 。 您可以讓light_daemon預分叉一定數量的工作進程。 如果其中一個工作人員死於任何原因,light_daemon將產生一個新的替換它。 如果您的工作進程可能導致內存泄漏問題,則可以讓工作在其過大之前主動終止。 父進程將保持工作進程數不變。 我在我的一個項目的生產站點中使用了它。 我工作得很好。
以下是使用light-daemon gem的示例守護程序 。
require 'rubygems'
require 'light_daemon'
class Client
def initialize
@count = 0
end
def call
`echo "process: #{Process.pid}" >> /tmp/light-daemon.txt`
sleep 3
@count +=1
(@count < 100)? true : false
end
end
LightDaemon::Daemon.start(Client.new, :children=> 2, :pid_file => "/tmp/light-daemon.pid" )
在守護程序中,工作進程在方法“調用”被調用100次之后死亡。 然后產生一個新的工作進程並繼續。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.