脚本在命令行中成功执行,但不是作为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