我正在用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或类似性质的东西。我对此很陌生,所以我在这里死胡同。
提前感谢!
我相信这是您需要在crontab中将路径应用于红宝石
但我个人更喜欢仅将要执行的ruby文件设置为路径。
*/5 * * * * /root/code/backup_images.rb local
然后附加
\#!/usr/bin/ruby
到backup_images.rb
的顶部
您还需要使ruby文件可执行为chmod +x
因此,在@tomodachi的帮助下,我进一步走了一步,明确地写下了下面的crontab行,现在可以使用。
*/15 * * * * cd /root/code/ && ./backup_images.rb local > /root/code/log/script.log
所以基本上我试图从bash shell执行命令,但找不到脚本。因此,我明确地进入直接命令,然后执行备份脚本。
从现在开始,一切正常。
感谢您的帮助。