【问题标题】:rufus scheduler not running in productionrufus 调度程序未在生产中运行
【发布时间】:2015-06-20 03:54:13
【问题描述】:

我有一个在 nginx 和乘客下运行的 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 开始的。不知道哪里出了问题。

谢谢。

【问题讨论】:

  • 你检查过服务器上的 crontab 列表吗?你可以使用这个命令'crontab -l'
  • 我没有 crontab。我以为我不需要它...看来我没有很好地阅读文档...

标签: ruby-on-rails linux scheduled-tasks passenger


【解决方案1】:

所以,我找到了答案here

我在nginx.conf 中添加了这两行(在passenger_enabled on; 之后):

    rails_app_spawner_idle_time 0;
    passenger_min_instances 1;

这样可以保持一个乘客线程处于活动状态。

【讨论】:

  • "passenger start --spawn-method direct" 你能帮忙解决这个问题吗
【解决方案2】:

这个问题很可能是由于 Rufus 调度程序后台线程在 Phusion Passenger 作为智能生成方法的一部分生成子进程后被终止。

阅读Spawning methods explained。 您遇到的具体问题可能是Smart spawning caveat #2: the need to revive threads

您需要使用文档中的机制来恢复 Rufus 调度程序线程。我不确定你需要调用哪个 API,所以也许你可以问问 Rufus 调度程序的作者。

或者,您可以使用“直接”生成方法。它的效率较低,但可以避免这样的兼容性问题。

【讨论】:

  • 对我来说看起来太复杂了。我将寻求其他更简单的方法。也许whenevergem。
  • 当涉及到执行模型(例如使用线程)时,when 与 rufus-scheduler 没有根本的不同,您很可能会在那里遇到相同的问题。解决此问题的最简单方法是在Passenger 中使用“直接”生成方法。
  • 我使用的是passenger 5 独立安装,在哪里设置passenger_spawn_method: direct ?
  • @techspartans 将--spawn-method direct 命令行参数传递给Passenger Standalone。
猜你喜欢
  • 1970-01-01
  • 2011-01-13
  • 2012-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多