问题描述
||
我有两个ruby脚本cron作业,我试图在AWS EC2实例上的Ubuntu 10.04.2 LTS下运行。它们都无声地失败-我看到它们在/ var / log / syslog中运行,但是没有结果文件,并且将输出传递到文件中不会产生任何结果。
脚本基于此处的ruby sql备份:
http://pauldowman.com/2009/02/08/MysqL-s3-backup/
(这是数据库的完整备份和增量bin-log输出。不确定这很重要。)
如果脚本由root或其他用户从命令行运行,则脚本可以正常工作-它可以运行,并且我看到文件显示在S3存储库中
我已经用一个简单的“ touch〜/ foo \”类型输入项测试了cron,效果很好。
我的cron根目录如下:
*/5 * * * * /home/ubuntu/MysqL_s3_backup/incremental_backup.rb
感谢任何帮助或调试建议。我的想法是,当cron运行作业时,某些ruby库依赖项可能不可用。但是我不明白为什么我似乎根本无法获得任何输出。非常沮丧。谢谢。
解决方法
您链接到的
full_backup.rb
脚本包含以下内容:
cmd = \"mysqldump --quick --single-transaction ...
#...
run(cmd)
请注意,ѭ3上没有完整路径。 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\'
或在备份脚本中指定“ 3”(以及任何其他外部可执行文件)的完整路径。
我会选择后两个选项之一(例如,在脚本中指定ENV[\'PATH\']
或使用可执行文件的完整路径),因为这将减少您对外部因素的依赖,并且这还将有助于避免人们使用自己的命令版本时遇到问题您需要在他们的PATH
中。
run
调用中的一些错误检查和处理也可能有用。
如果由于权限或路径问题而无法访问任何必需的Ruby库,那么您可能会从脚本中收到投诉。