【问题标题】:Whenever / cron jobs failing, but fine manually每当 / cron 作业失败,但手动正常
【发布时间】:2013-06-27 17:29:53
【问题描述】:

在 cron 作业中苦苦挣扎。服务器上的 Ubuntu 11.10。

直到最近,每天都会成功运行几次 cron 作业;然后由于另一个问题,我不得不从服务器中删除 RVM 并返回安装没有 RVM 的 ruby​​ 1.9.3(我确定这与它有关)

我的应用中没有 .rvmrc 文件

现在,正如我从 syslog 中看到的那样,cron 作业以某种方式失败了:

Jun 30 08:03:01 ip-10-251-30-96 CRON[18706]: (ubuntu) CMD (/bin/bash -l -c 'cd /var/www/my_app/app/releases/201300629090954 && script/rails runner -e production '\''User.remind_non_confirmed_users'\''')
Jun 30 08:03:01 ip-10-251-30-96 CRON[18705]: (CRON) error (grandchild #18706 failed with exit status 127)
Jun 30 08:03:01 ip-10-251-30-96 CRON[18705]: (CRON) info (No MTA installed, discarding output)

如果我手动运行该命令(使用 env - /bin/bash -l -c '...' )它运行良好..

我将添加“set :output, 'tmp/whenever.log'” 来查看发生了什么,但我怀疑这是 ruby​​ 版本/路径或其他问题。

知道如何正确诊断/解决此问题吗?

这是我的 cron/无论何时工作:

3 8 * * * /bin/bash -l -c 'cd /var/www/my_app/app/releases/20130629090954 && script/rails runner -e production '\''User.remind_non_confirmed_users'\''' 

非常感谢

【问题讨论】:

  • 您是否在同一环境中手动运行 cron 作业,在同一数据库上?
  • 嗨,是的,我在 ssh 上运行命令到服务器,相同的代码/相同的数据库
  • 您的意思是使用:/tmp/whenever.log

标签: ruby-on-rails ruby cron whenever


【解决方案1】:

为了帮助诊断发生了什么,我通常将 cron 输出捕获到一个单独的日志文件中。可能有一个错误没有被记录在任何地方。

@hourly bash -lc 'cd /path/to/app; RAILS_ENV=production bundle exec rake remind_non_confirmed_users' >> /path/to/app/log/tasks.log

另外,我更喜欢为 cron 作业创建 rake 任务,而不是运行器。至少对我来说,通过命令行调用比运行程序更容易。

【讨论】:

  • 奇怪的是日志文件没有被创建;然而'ubuntu'用户对我试图写它们的地方有写权限..(/tmp)
  • 嗯,你只是想弄清楚为什么任务失败了,对吧?也许现在把你的输出日志放在像 $HOME 这样简单的地方,这样你就可以解决 ruby​​ 问题。
【解决方案2】:

我仍然不确定发生了什么,运行带有 'set :output' 的任何东西都应该创建日志文件,但它没有,但作业仍然失败(并且日志文件有写入权限)。

我受够了,我在不使用脚本/运行程序的情况下重新开发了解决方案,而是让 cron 只调用一个 URL,然后将事务作为延迟工作来处理。对于我们的特殊情况,这有许多额外的好处,尽管我知道这对许多人来说并不理想。

感谢您的建议

【讨论】:

    猜你喜欢
    • 2019-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-04
    • 2020-06-26
    相关资源
    最近更新 更多