脚本在命令行中成功执行,但不是作为cron作业执行

时间:2010-03-08 01:00:56

标签: ruby bash cron

我有一个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。不知道为什么会这样。有什么想法吗?

6 个答案:

答案 0 :(得分:11)

Ruby版本管理器(rvm)导致了这个问题。我不得不像这样在cron中调用脚本。

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

答案 1 :(得分:9)

我认为可以通过强制bash充当登录shell来完成,所以它来源.bashrc等:

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

Here是关于此的文章。

答案 2 :(得分:1)

我使用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

答案 3 :(得分:0)

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

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

可替换地:

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

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