脚本在命令行中成功执行,但不是作为cronjob执行
我有一个bash脚本运行一个ruby脚本来获取我的twitter提要。
## /home/username/twittercron #!/bin/bash cd /home/username/twitter ruby twitter.rb friends
它在命令行中成功运行。
/home/username/twittercron
但是当我尝试将其作为cronjob运行时,它运行但无法获取提要。
## crontab -e */15 * * * * * /home/username/twittercron
该脚本已经是chmod + x。 不知道为什么会这样。 有任何想法吗?
Ruby版本管理器(rvm)导致了这个问题。 我不得不像这样在cron中调用脚本。
*/15 * * * * bash -c 'source /home/username/.rvm/scripts/rvm && /usr/bin/env ruby /home/username/twitter/twitter.rb friends'
我认为这可以通过强制bash充当登录shell来完成,所以它来源.bashrc等:
*/15 * * * * * /bin/bash -l -c '/home/username/twittercron'
这是一篇关于此的文章。
我使用http://github.com/javan/whenever有很好的经验
它使用Ruby DSL来管理cron任务,它处理所有环境魔法的设置。
every 3.hours do runner "MyModel.some_process" rake "my:rake:task" command "/usr/bin/my_great_command" end
您需要提供执行命令的绝对路径(或通过env)。
*/15 * * * * * /usr/bin/env sh /home/username/twittercron
或者:
*/15 * * * * * /usr/bin/env ruby /home/username/twitter/twitter.rb friends
你的crontab中有一个太多*
s。
检查您的邮件,看看是否有任何错误消息。 在你的bash脚本中加入一些调试,比如在最后一行echo done>debug.log
,看看是否创建了debug.log
。 删除脚本中的## /home/username/twittercron
并将#!/bin/bash
放在第一行。
*/15 * * * * * /bin/bash /home/username/twittercron