2012-03-18 91 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