我已经编写了一个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)
编辑:
感谢@HolgerJust的评论,我找到了这个链接,它帮助我获得了一个工作脚本。
这是我的脚本的更新版本
#!/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
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初始化脚本)。