通过cron启动时,我的Shell脚本启动Rake无法正常运行

时间:2012-03-18 17:42:28

标签: ruby-on-rails shell ubuntu cron rake

我编写了一个应该用Crontab自动运行的Rake脚本。在命令行中输入时脚本运行正常,但无法在cron中正确运行。

脚本如下所示:

#!/bin/sh

echo `date`
cd /home/mick/myapp/current
rake RAILS_ENV=production mynamespace:myaction

crontab设置如下所示:

10 0,6,12,18 * * * /home/mick/work/launch.sh >> /home/mick/work/launch.log

执行后,日志文件只包含日期,但没有其他内容,我在syslog中得到的错误如下所示:

Mar 18 18:10:01 CRON[21773]: (mick) CMD (/home/mick/work/launch.sh >> /home/mick/work/launch.log)
Mar 18 18:10:01 CRON[21772]: (CRON) error (grandchild #21773 failed with exit status 127)
Mar 18 18:10:01 postfix/sendmail[21776]: fatal: open /etc/postfix/main.cf: No such file or directory
Mar 18 18:10:01 CRON[21772]: (mick) MAIL (mailed 1 byte of output; but got status 0x004b, #012)

编辑

感谢@Holger Just的评论,我发现this link帮助我找到了工作脚本。

这是我的脚本的更新版本

#!/usr/bin/env bash # UPDATED TO GET ACCESS TO 'source'

export PATH=blabla # NOT SURE THIS HELPED AS IT WAS MY FIRST MODIF AND DIDN'T FIX
source /home/mick/.rvm/environments/default # LOADING RVM TO MAKE THINGS WORK
echo `date`
cd /home/mick/myapp/current
rake RAILS_ENV=production mynamespace:myaction

1 个答案:

答案 0 :(得分:4)

Cron通常有一个非常有限的$PATH。因此,您可以在脚本之上设置$PATH,也可以在整个过程中使用完整路径。您可以在脚本中设置路径,如

export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin

当然,您可能需要调整$PATH。例如您可以使用root用户的登录shell。您可以通过运行echo $PATH

来实现

另请注意,如果您使用RVM,则需要在cron脚本中明确加载它,因为cron默认情况下不加载rvm(或任何其他shell初始化脚本)。