我有两个ruby script cron作业,我正尝试在AWS EC2实例上的Ubuntu10.04.2LTS下运行它们。它们都在静默地失败--我看到它们在/var/log/syslog中运行,但是没有结果文件,并且将输出通过管道传输到一个文件中不会产生任何结果。
这些脚本基于下面的ruby sql备份:http://pauldowman.com/2009/02/08/mysql-s3-backup/
(它是数据库的完整备份和增量bin-log输出。我不确定这是否重要。)
如果由超级用户或其他用户从命令行运行该脚本,则该脚本工作得很好-它会运行,并且我看到文件出现在S3存储库中
我用一个简单的"touch ~/foo“类型的条目测试了cron,它工作得很好。
我在root下的cron条目如下:
*/5 * * * * /home/ubuntu/mysql_s3_backup/incremental_backup.rb感谢任何帮助或调试建议。我的想法是,当cron运行作业时,一些ruby库依赖项可能不可用。但我不明白为什么我似乎不能得到任何输出返回给我。非常令人沮丧。谢谢。
发布于 2011-05-31 10:04:50
您链接到的full_backup.rb脚本包含以下内容:
cmd = "mysqldump --quick --single-transaction ...
#...
run(cmd)请注意,mysqldump上没有完整路径。mysqldump作业通常在其环境中使用非常有限的PATH运行,我猜Cron不在那个有限的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库无法访问(由于权限或路径问题),那么您可能会收到脚本的抱怨。
https://stackoverflow.com/questions/6182097
复制相似问题