2013-10-31 35 views
0

我有这些rake任务偶尔会失败。我想使用monit来监视它们并在必要时重新启动它们。如何为Ruby程序创建一个monit进程?

我已阅读StackOverflow上的其他ruby/monit线程。我的情况不同,因为这些程序需要我的Rails环境才能工作。这就是为什么我现在将它们作为rake任务。

这里是我需要监控的任务之一,在它的全部:

task(process_updates: :environment) do 
    `echo "#{Process.pid}" > #{Rails.root}/log/process_alerts.pid` 
    `echo "#{Process.ppid}" > #{Rails.root}/log/process_alerts.ppid` 
    SynchronizationService::process_alerts 
end 

我的问题是,我该离开这个作为rake的任务,因为SynchronizationService::process_alerts需要Rails的环境中工作?还是有一些其他包装我应该调用,然后运行一些* .rb文件?

回答

1

monit的可以检查运行PID,因为你正在创建PID当您运行的任务,你可以创建一个配置的monit这应该是这个样子:

check process alerts with pidfile RAILSROOT/log/process_alerts.pid 
    start program = "cd PATH_TO_APP; rake YOURTASK" with timeout 120 seconds 
    alert [email protected] on { nonexist, timeout } 

当然RAILSROOT中,PATH_TO_APPYOURTASK应该对应您的路径/耙子任务。

然后Monit将使用pidfile值检查系统中的运行进程,如果找不到运行进程,将使用启动程序命令启动进程。