2012-03-18 94 views
5

我已经编写了一个Rake脚本,该脚本应该可以与Crontab自动运行。在命令行中键入脚本时脚本运行正常,但无法在cron内正确运行。通过cron启动My Shell脚本启动Rake无法正确运行

脚本是这样的:

#!/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 

执行后,日志文件只包含日期,但没有别的,和错误,我得到在系统日志中看起来像这样:

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 
+0

甚至所有添加到脚本中的环境东西都没有解决我遇到的类似问题,但是一个简单的/矫枉过正的“source〜/ .bash_profile”就这样做了。 – David 2012-11-09 00:48:57

回答

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初始化脚本)。

+0

谢谢。随着你的输入(这导致我到这个链接),我得到它的工作,参见。编辑的问题 – 2012-03-18 18:04:05