如何检查我的 Rails 应用程序的 rufus-scheduler 是否已经 运行

How to check if rufus-scheduler is already running for my Rails Application

我有一个 Rails 应用程序,它使用 rufus-scheduler 来安排它的一些任务。调度程序在启动 Rails 应用程序的独角兽脚本的 after_fork 中初始化(参考:https://gist.github.com/jkraemer/3851917)。

最近,我遇到了一个场景,当托管它的独角兽进程仍然处于活动状态时,独角兽调度程序线程被杀死了。这导致调度程序在没有通知的情况下停机了相当长的一段时间。

我想设置一个警报和监控系统来处理应该能够: 1. 每当调度程序线程 killed/aborted 时抛出警报。 2. 如果 Rails 进程为 运行.

,则重新启动调度程序

什么是了解调度程序 运行 状态的合适方法,可能是通过 cron 任务并处理自动重启?

如果你引入一个 cron 任务来监视 rufus-scheduler,你为什么不简单地删除 rufus-scheduler 并使用 Whenever 进行所有调度?因此,您将拥有 100% 的 crond 解决方案。

另一种选择,使用Foreman to manage a) your Rails application b) a separate process hosting your rufus-scheduler schedules (it could be a "schedule only" version of your Rails application) (here is a nice example in a blog post). There is also God

如果你看一下 Clockwork,一个受 rufus-scheduler 启发的 gem,他们 detail 这样一个应用程序/多个进程场景。

然后您可以查看各种工具来查看您的日志并在出现错误时提醒您。

更新:

也许这个要点可以帮助:https://gist.github.com/jmettraux/5f716c8568f6ab7bb016a4bc11528bc2