如何为 Ruby 程序创建监控过程



我有这些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 值检查系统中正在运行的进程,如果找不到正在运行的进程,将使用启动程序命令启动进程。

最新更新