2

我正在用 Ruby 重写一些 shell 脚本,这些脚本将用于备份我们网站上的特定内容。我正在运行 Ruby 1.8.7 并让脚本以 root 身份在本地运行,它工作正常。

我刚刚尝试将脚本添加到 Ubuntu 11.10 上的 cronttab。

*/5 * * * * ruby /root/code/backup_images.rb local

当 cron 运行时,我在 syslog 中收到以下错误:

Mar 21 16:15:01 ubuntu CRON[4942]: (root) CMD (ruby /root/code/backup_images.rb local)
Mar 21 16:15:02 ubuntu CRON[4941]: (CRON) error (grandchild #4942 failed with exit status 1)

我尝试了以下解决方案但无济于事:

env -i $SHELL --norc

据说它会创建一个新的裸壳来模仿 crontab 运行的内容,并且这适用于我的脚本。

#!/usr/bin/env ruby

我已将该声明添加到我的脚本顶部,它在手动运行时没有改变功能,也没有解决 crontab 的问题。

我什至尝试将调用的结果输出到一个文件,但这只会创建一个没有任何内容的新文件。

我不确定还有什么问题,但我假设它必须是 Cron 无法找到 Ruby 或类似性质的东西。我对此很陌生,所以我在这里走到了死胡同。

提前致谢!

4

2 回答 2

0

我认为问题在于您需要在 crontab 中应用 ruby​​ 的路径

但就我个人而言,我更喜欢只是路径要执行的 ruby​​ 文件。

*/5 * * * * /root/code/backup_images.rb local

然后追加

#!/usr/bin/env ruby  

到顶部backup_images.rb

您还需要使 ruby​​ 文件可执行 chmod +x

于 2012-03-22T03:41:53.227 回答
0

因此,在@tomodachi 的帮助下,我更进一步,明确地写出了以下 crontab 行,它现在可以工作了。

*/15 * * * * cd /root/code/ && ./backup_images.rb local > /root/code/log/script.log

所以基本上我试图从 bash shell 执行命令,但没有找到脚本。所以我明确地进入直接然后执行备份脚本。

从现在开始,一切都很好。

谢谢你的帮助。

于 2012-03-22T19:37:20.433 回答