2010-03-08 27 views
5

我有一个bash脚本,它运行一个ruby脚本来获取我的twitter提要。脚本在命令行中成功执行,但不是作为cronjob

## /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。不知道为什么它是这样的。有任何想法吗?

回答

11

Ruby Version Manager(rvm)导致该问题。我不得不像这样在cron中调用脚本。

*/15 * * * * bash -c 'source /home/username/.rvm/scripts/rvm && /usr/bin/env ruby /home/username/twitter/twitter.rb friends' 
+0

我一直在试图解决这个问题大约一个星期。非常感谢你做的这些! – 2010-05-11 15:38:20

+0

你最受欢迎。 – JasonOng 2010-06-02 07:48:50

+0

您可以改为使用源代码来取代您的整个bashrc。 '源$ HOME/.bashrc && ...' – kch 2010-07-28 19:22:55

0

您需要提供执行命令(或通过env)的绝对路径。

*/15 * * * * * /usr/bin/env sh /home/username/twittercron 

或者:

*/15 * * * * * /usr/bin/env ruby /home/username/twitter/twitter.rb friends 
+1

这是他正在运行的bash脚本。 – ghostdog74 2010-03-08 01:05:42

+0

我试过了你的替代建议。这仍然不好... – JasonOng 2010-03-08 02:08:15

+0

你期待什么结果?它是否写出到文件或数据库?还是你只是在等待crontab的stdout被系统邮寄给你? – bojo 2010-03-08 02:25:09

0

你有一个太多*在你的crontab。

+0

对不起,这是一个错字。我有正确的没有。 *的。 – JasonOng 2010-03-08 02:07:08

0

检查您的邮件,看看是否有任何错误消息。在你的bash脚本中加入一些调试,例如echo done>debug.log在最后一行,看看是否创建了debug.log。删除脚本中的## /home/username/twittercron,并将#!/bin/bash放在第一行。

*/15 * * * * * /bin/bash /home/username/twittercron 
+0

而不是debug.log,试试:'MAILTO = your @ email.addy'(在crontab中),然后运行'/ bin/bash -x/home/username/twittercron'作为cron命令。这将在最后发送完整的跟踪邮件。 – 2010-03-08 01:10:43

+0

我的/ var/log/syslog&/var/log/cron.log显示该命令已运行但未引发错误。 – JasonOng 2010-03-08 02:09:53

1

我已经使用http://github.com/javan/whenever

它使用一个Ruby的DSL来管理后台任务,它处理设置所有环境魔术很好的经验。

every 3.hours do 
    runner "MyModel.some_process" 
    rake "my:rake:task" 
    command "/usr/bin/my_great_command" 
end 
9

我认为可以只通过强制的bash作为一个登录shell来完成,所以源的.bashrc等:

*/15 * * * * * /bin/bash -l -c '/home/username/twittercron' 

Here是关于这个的文章。

相关问题