带有Ruby脚本的Crontab返回错误代码1

问题描述 投票:2回答: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或类似性质的东西。我对此很陌生,所以我在这里死胡同。

提前感谢!

ruby crontab ubuntu-11.10
2个回答
0
投票

我相信这是您需要在crontab中将路径应用于红宝石

但我个人更喜欢仅将要执行的ruby文件设置为路径。

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

然后附加

\#!/usr/bin/ruby  

backup_images.rb的顶部

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


0
投票

因此,在@tomodachi的帮助下,我进一步走了一步,明确地写下了下面的crontab行,现在可以使用。

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

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

从现在开始,一切正常。

感谢您的帮助。

© www.soinside.com 2019 - 2024. All rights reserved.