0

与 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'\''' 

非常感谢

4

2 回答 2

0

我仍然不确定发生了什么,使用'set:output'运行Whatever应该已经创建了日志文件,但它没有,但作业仍然失败(并且日志文件有写权限)。

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

感谢您的建议

于 2013-07-01T15:24:41.887 回答
0

为了帮助诊断发生了什么,我通常将 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 任务,而不是运行器。至少对我来说,通过命令行调用比运行程序更容易。

于 2013-06-30T12:56:34.143 回答