我正在重写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
据说可以创建一个新的裸shell,模仿crontab运行的内容,这对我的脚本运行良好。
#!/usr/bin/env ruby
我已将该声明添加到我的脚本顶部,该声明在手动运行时未更改功能,也未解决crontab的问题。
我甚至试图将调用的结果输出到文件,但是只创建一个没有任何内容的新文件。
我不确定还有什么可能是问题,但我认为它必须是Cron无法找到Ruby或其他性质的东西。我对此很陌生,所以我在这里走到了尽头。
提前致谢!
答案 0 :(得分:0)
我认为你需要在你的crontab
中应用ruby的路径但我个人更喜欢只追踪要执行的ruby文件。
* / 5 * * * * /root/code/backup_images.rb local
然后追加
#!的/ usr / bin中/红宝石
到backup_images.rb的顶部
你还需要使ruby文件可执行 chmod + x
答案 1 :(得分:0)
所以在@tomodachi的帮助下,我更进了一步,明确写出了下面的crontab行,现在可以正常工作了。
*/15 * * * * cd /root/code/ && ./backup_images.rb local > /root/code/log/script.log
所以基本上我尝试从bash shell执行命令,但是没有找到脚本。所以我明确地进入直接然后执行备份脚本。
从现在开始,一切都很顺利。
感谢您的帮助。