我正在使用 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 备份