在 cron 中运行时 Rake 任务失败

在 cron 中运行时 Rake 任务失败

我正在使用 backup_fu 备份我的数据库。在 crontab 中,您有以下命令:

* * * * * cd /var/www/amplify/current && RAILS_ENV=production /usr/bin/env rake backup

是的,我知道一分钟备份一次很麻烦,但我只是想测试一下。一旦我让它正常工作,我就会更改间隔。

  • 但是,在 cron 中运行它不会备份。当我检查我的 Amazon S3 帐户时,我没有看到 .tar.gz 文件。
  • 当我通过 SSH 接入并准确粘贴命令时,它会备份,然后我会在 Amazon S3 中看到 .tar.gz。

笔记:

  • 我使用的是 RVM。但是,如此主题,如果我使用 cd 进入目录,就会出现正确的 ruby​​ 选择。
  • 我在 CentOS 上:Linux version 2.6.18-194.8.1.el5.028stab070.5 (root@rhel5-build-x64) (gcc version 4.1.2 20080704 (Red Hat 4.1.2-46)) #1 SMP Fri Sep 17 19:10:36 MSD 2010
  • 我检查了一下/var/log/cron,它似乎可以运行:Feb 27 00:20:01 amplify crond[1667]: (ramon) CMD (cd /var/www/amplify/current && RAILS_ENV=production /usr/bin/env /usr/bin/rake backup)

任何帮助都值得感激,谢谢!

答案1

看来这最终成了 RVM 问题,而不是服务器问题。我很抱歉。感谢您的回答;它们帮助我解决了问题。

最后一个有效的方法是:

cd /var/www/amplify/current && source /home/ramon/.rvm/environments/ree-1.8.7-2010.02@rails3 && RAILS_ENV=production /home/ramon/.rvm/gems/ree-1.8.7-2010.02@rails3/bin/rake backup &>/home/ramon/backup.log

关键是使用source /home/ramon/.rvm/environments/ree-1.8.7-2010.02@rails3

当我向 Wayne Seguin 询问有关使用 cd 进入目录并自动加载 .rvmrc 的问题时,他说它只有在以下情况下才会起作用:

  • RVM 已作为函数正确加载(类型 rvm | head -1)
  • .rvmrc 之前已被信任

因此,似乎在 cron 中,RVM 没有作为函数正确加载,因为我之前“信任”了 .rvmrc。

答案2

您是否检查过运行 cron 作业的帐户的邮件,命令的输出应该出现在那里,并且可能包含有关问题的线索。

将命令的输出捕获到文件中并添加&>/path/to/logfile到命令末尾以了解发生了什么。

答案3

这:

/usr/bin/env rake backup

取决于PATH包含的位置rake。这与简单地拥有相同

rake backup

环境cron与交互式会话的环境不同。更改 crontab 中的行以直接指向rake可执行文件:

* * * * * cd /var/www/amplify/current && RAILS_ENV=production /path/to/rake backup

或者设置你的 crontab PATH(在 crontab 内)以包含它:

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/path/to/where/rake/is

答案4

将您的 cronjob 放入单独的脚本并在 crontab 中调用它。

cd /var/www/amplify/current && RAILS_ENV=production /usr/bin/env rake 备份

相关内容