rufus scheduler 未 运行 投入生产
rufus scheduler not running in production
我在 nginx 和 passenger 下有一个 rails 服务器 运行。我的 sheduler.rb
看起来像这样
require 'rufus-scheduler'
my_awesome_job = Rufus::Scheduler.new
my_awesome_job.cron '59 23 * * *' do
#do something
end
如果我将作业设置为接下来的 2-3 分钟(用于测试),一切正常。但是这个,因为我在生产中需要它,并不是每天都从 23:59 开始。不知道哪里出了问题
谢谢。
这个问题很可能是由于 Rufus 调度程序后台线程在 Phusion Passenger 作为智能生成方法的一部分生成子进程后被终止造成的。
阅读Spawning methods explained。
您遇到的具体问题可能是 Smart spawning caveat #2: the need to revive threads.
您需要使用文档中的机制恢复 Rufus 调度程序线程。我不确定您需要进行哪个 API 调用,所以也许您可以询问 Rufus 调度程序作者。
或者,您可以使用 'direct' 生成方法。它的效率较低,但它避免了这样的兼容性问题。
所以,我找到了答案here
我在 nginx.conf
中添加了这两行(在 passenger_enabled on;
之后):
rails_app_spawner_idle_time 0;
passenger_min_instances 1;
保持一个乘客线程处于活动状态。
我在 nginx 和 passenger 下有一个 rails 服务器 运行。我的 sheduler.rb
看起来像这样
require 'rufus-scheduler'
my_awesome_job = Rufus::Scheduler.new
my_awesome_job.cron '59 23 * * *' do
#do something
end
如果我将作业设置为接下来的 2-3 分钟(用于测试),一切正常。但是这个,因为我在生产中需要它,并不是每天都从 23:59 开始。不知道哪里出了问题
谢谢。
这个问题很可能是由于 Rufus 调度程序后台线程在 Phusion Passenger 作为智能生成方法的一部分生成子进程后被终止造成的。
阅读Spawning methods explained。 您遇到的具体问题可能是 Smart spawning caveat #2: the need to revive threads.
您需要使用文档中的机制恢复 Rufus 调度程序线程。我不确定您需要进行哪个 API 调用,所以也许您可以询问 Rufus 调度程序作者。
或者,您可以使用 'direct' 生成方法。它的效率较低,但它避免了这样的兼容性问题。
所以,我找到了答案here
我在 nginx.conf
中添加了这两行(在 passenger_enabled on;
之后):
rails_app_spawner_idle_time 0;
passenger_min_instances 1;
保持一个乘客线程处于活动状态。