我有两个ruby脚本cron作业,我正在尝试在AWS EC2实例上的Ubuntu 10.04.2 LTS下运行。它们都是静默失败 - 我看到它们在/ var / log / syslog中运行,但是没有生成的文件,并且将输出汇总到文件中不会产生任何结果。
这些脚本基于ruby sql备份: http://pauldowman.com/2009/02/08/mysql-s3-backup/
(它是db的完整备份和增量bin-log输出。不确定是否重要。)
如果由root或其他用户从命令行运行,脚本运行正常 - 它运行,我看到S3 repo中出现的文件
我用简单的“touch~ / foo”类型条目测试了cron并且运行正常。
我在根目录下的cron条目是:
*/5 * * * * /home/ubuntu/mysql_s3_backup/incremental_backup.rb
感谢任何帮助或调试建议。我的想法是,当cron运行作业时,某些ruby库依赖项可能不可用。但我不明白为什么我似乎无法得到任何输出归还给我。很沮丧。感谢。
答案 0 :(得分:1)
您链接的full_backup.rb
脚本包含:
cmd = "mysqldump --quick --single-transaction ...
#...
run(cmd)
请注意mysqldump
上没有完整路径。 Cron的工作通常在他们的环境中运行时非常有限PATH
,我猜测mysqldump
不在那个有限的PATH
中。您可以尝试在crontab中设置自己的PATH
:
PATH='/bin:/usr/bin:/whatever/else/you/need'
*/5 * * * * /home/ubuntu/mysql_s3_backup/incremental_backup.rb
或者在Ruby脚本中:
ENV['PATH'] = '/bin:/usr/bin:/whatever/else/you/need'
或者在备份脚本中指定mysqldump
(以及任何其他外部可执行文件)的完整路径。
我会选择后两个选项中的一个(即在脚本中指定ENV['PATH']
或使用可执行文件的完整路径),因为这样可以减少对外部因素的依赖,这也有助于避免人们遇到问题在PATH
。
run
调用上的一些错误检查和处理也可能有用。
如果无法访问任何必要的Ruby库(由于权限或路径问题),那么您可能会收到来自脚本的投诉。