gpt4 book ai didi

尝试将 MySQL 备份到 S3 时,Ubuntu 中的 Ruby cron 作业静默失败

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:10:51 25 4
gpt4 key购买 nike

我有两个 ruby​​ 脚本 cron 作业,我试图在 AWS EC2 实例上的 Ubuntu 10.04.2 LTS 下运行。它们都无声地失败了——我看到它们在/var/log/syslog 中运行,但是没有结果文件,并且将输出通过管道传输到文件中也没有结果。

脚本基于此处的 ruby​​ sql 备份: http://pauldowman.com/2009/02/08/mysql-s3-backup/

(这是数据库的完整备份和增量二进制日志输出。不确定是否重要。)

如果 root 或其他用户从命令行运行该脚本,则该脚本工作正常 - 它运行,并且我看到文件出现在 S3 存储库中

我用一个简单的“touch ~/foo”类型条目测试了 cron,它运行良好。

我在 root 下的 cron 入口是这样的:

*/5 * * * * /home/ubuntu/mysql_s3_backup/incremental_backup.rb

感谢任何帮助或调试建议。我的想法是,当 cron 运行作业时,某些 ruby​​ 库依赖项可能不可用。但我不明白为什么我似乎无法将任何输出返回给我。非常令人沮丧。谢谢。

最佳答案

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

关于尝试将 MySQL 备份到 S3 时,Ubuntu 中的 Ruby cron 作业静默失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6182097/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com