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

5

我编写了一个Rake脚本,应该在Crontab自动运行。当在命令行中输入脚本时,它可以正常运行,但是在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

执行后,日志文件中只有日期而没有其他信息,而我在系统日志中收到的错误信息如下:
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的评论,我找到了这个链接,帮助我得到了一个可用的脚本。

下面是我的脚本的更新版本。

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

即使在这里添加了所有的环境设置,也没有解决我之前遇到的类似问题,但是一个简单/过度的“source ~/.bash_profile”就解决了它。 - David
1个回答

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


谢谢。有了您的帮助(导致我找到了这个链接),我已经解决了问题,参见编辑后的问题。 - Dirty Henry

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接