在尝试将MySQL备份到S3时,Ubuntu中的Ruby cron作业无声地失败

时间:2011-05-31 01:25:09

标签: ruby linux ubuntu cron

我有两个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库依赖项可能不可用。但我不明白为什么我似乎无法得到任何输出归还给我。很沮丧。感谢。

1 个答案:

答案 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库(由于权限或路径问题),那么您可能会收到来自脚本的投诉。