我有这些rake
任务偶尔会失败。我想使用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 文件?
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 your@mail.com on { nonexist, timeout }
当然,RAILSROOTPATH_TO_APP,YOURTASK应该与你的路径/耙子任务相对应。
然后,Monit 将使用 pidfile 值检查系统中正在运行的进程,如果找不到正在运行的进程,将使用启动程序命令启动进程。