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