2012-08-22 150 views
0

我有一個sh腳本,我希望通過cron每三個小時調用一次。該腳本調用一堆node.js腳本,並在直接調用時完美工作。但是,當通過cron調用時,我得到的是由sh腳本記錄的日期,但是沒有其他日誌來自我的node.js腳本(當sh直接調用時,所有日誌都會記錄)。任何想法爲什麼?Crontab和sh腳本

該腳本位於內部目錄中,但我使用的是全部絕對路徑。請在下面找到我的代碼,並在Github上注意node.js的更多細節(注意:服務器最近從sh更改爲bash,但我認爲這不會有任何實際影響)。

crontab的

SHELL=/bin/sh 
[email protected] 
0 */3 * * * /absolute/path/to/script.sh 

script.sh

#!/usr/bin/env sh 
node /absolute/path/to/script1.js 
node /absolute/path/to/script2.js 
node /absolute/path/to/script3.js 

LOGFILE=/absolute/path/to/error.log 

log(){ 
    message="[email protected]" 
    echo $message 
    echo $message >>$LOGFILE 
} 

log "Cron performed $(date)" 
+0

來自crond的PATH一定不能用於您的節點命令 –

+1

不要這樣認爲。如果我用直接從'crontab -e'複製的路徑調用'bash/absolute/path/to/script.sh',它可以正常工作。 – Primus202

+3

嘗試指定'node'的完整路徑。 – choroba

回答

2

當調用命令crontab的不加載你的普通用戶的環境,因此,任何其他環境變量的bash腳本或節點.js的東西取決於不會在那裏。例如,你的shell如何找到'node'命令?

Cron腳本不會在您的用戶帳戶的bash環境中運行,因此直接在您的shell中運行它們不是有效的測試。

+0

我試過使用所有完整的路徑,即使是節點,仍然沒有運氣。 '/ usr/local/bin/node/absolute/path/to/twitterupdate.js' – Primus202

+0

您可以嘗試通過您的環境查看節點可能依賴的任何其他環境設置。一定有東西。 –

+0

該解決方案在我的所有文件中都使用包含在我的節點腳本中的絕對路徑以及幾乎所有的文件。謝謝。 – Primus202

0
PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin 
SHELL=/bin/sh 
[email protected] 
0 */3 * * * /absolute/path/to/script.sh