Ruby on rails 无论何时/cron作业失败,但可以手动执行

Ruby on rails 无论何时/cron作业失败,但可以手动执行,ruby-on-rails,ruby,cron,whenever,Ruby On Rails,Ruby,Cron,Whenever,正在与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/

正在与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/everywhere.log'”添加到where中,以查看发生了什么,但我怀疑这是ruby版本/路径或其他方面的问题

你知道我如何正确诊断/修复这个问题吗

这是我的cron/where工作:

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输出捕获到一个单独的日志文件中。可能有一个错误没有被记录在任何地方

@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任务,而不是运行程序。至少对我来说,通过命令行调用要比运行程序容易一些

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

我受够了,我没有使用script/runner重新开发了解决方案,取而代之的是cron只是调用一个URL,然后作为一个延迟的工作来处理问题。对于我们的特殊情况,这有许多额外的好处,尽管我知道这对许多人来说并不理想


感谢您的建议

您是否在相同的环境中、相同的数据库上手动运行cron作业?您好,是的,我正在对服务器运行ssh命令,相同的代码/相同的数据库您是否打算使用:
/tmp/where.log
?通常不会创建日志文件;然而“ubuntu”用户对我试图写入它们的地方拥有写入权限。。(/tmp)嗯,你只是想弄明白为什么任务失败了,对吧?也许现在就把你的输出日志放在一个简单的地方,比如$HOME,这样你就可以解决ruby问题了。