簡體   English   中英

Ruby如何創建將產生多個工作程序的守護進程

[英]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.

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