我正在尝试从crontab触发的bash脚本中运行RAKE文件:
我的crontab看起来像这样:
* * * * * /bin/bash ~/sites/www/tweeet/get_tweeet.sh
我的bash脚本(get_tweeet.sh)如下所示:
1 #!/bin/bash
2 set -x
3 cd /var/www/tweeet/
4 export RAILS_ENV=development
5 rake get_tweeet >> /var/www/tweeet/test.log
6 echo "$(date): cron job run " >> /var/www/tweeet/test.log
第6行输出到test.log但第5行现在执行 - rake没有运行。
但是如果我使用crontab
中的确切行来调用脚本/bin/bash /var/www/tweeet/get_tweeet.sh
然后它有效 - 我对此感到困惑!
答案 0 :(得分:1)
您可以直接执行脚本,因为它可以提供完整的环境。即使cronjob属于同一个用户,它也不会。因此,一种解决方案是从完整的登录shell中启动它。在您的crontab中:
bash --login -c '/var/www/tweeet/get_tweeet.sh'
我记得看到一些关于这个可能有一些微妙的副作用的帖子,我不记得了,但它一直在为我工作。