2012-11-07 80 views
0

我一直在摸索着我的頭腦。 我有一個由root cron作業運行的腳本。 該腳本執行,但腳本內有一個不會執行的腳本。 這裏是我們稱之爲SCRIPTA在shell腳本中執行shellscript

#!/bin/bash 
lines=`wc -l < /var/www/log/addme`; 
DATE=`date +%Y-%m-%d` 

if [[ $lines > 4 ]]; 
then 
echo " " > /var/www/log/addme 
RESTART=/var/www/log/restart.sh 
$RESTART 
else 
echo "No new hosts added" | wall 
fi 

基本上什麼restart.sh腳本做是爲了重新啓動服務。當我從終端運行它們 一切都運行得很好,但不能作爲cron作業... 我也試圖只是把

./restart.sh 
/var/www/log/restart.sh 

但隨着相同的結果。 有什麼想法?

+0

cron作業是以超級用戶還是以其他用戶身份運行?用戶是否可以訪問/ var/www/log?你有沒有試過記錄第一個腳本嘗試調用第二個腳本時發生了什麼(將'$ RESTART'更改爲'$ RESTART> /var/tmp/foo.log 2>&1')? –

+0

'/ var/www/log/restart.sh'上有什麼權限?它是可執行的嗎?如果沒有,你可以'chmod + x',或者在腳本A中用'bash $ RESTART'運行它。 – ghoti

+0

此外,設置了'MAILTO'可變你的crontab裏面,這樣就可以看到由工作產生什麼錯誤。 – ghoti

回答

2

我懷疑你遇到了cron運行它的最小環境的問題。最重要的是PATH是非常小的,你的腳本可能使用了一些無法找到的命令。

如果出現這種問題,可以採取以下幾種方法解決問題:最簡單的方法是在運行腳本的條目之前,將適當的PATH定義添加到crontab文件中。類似這樣的:

PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin 
0 * * * *  /var/www/log/scriptA 

第二個是在scriptA的開頭添加一個類似的賦值。第三個選項是通過兩個腳本,並使用所有命令的完整路徑(例如/usr/bin/wc而不是wc)。

順便說一句,還有一個測試[[ $lines > 4 ]]的問題 - [[ ]],>內部做一個字符串(字母)比較,而不是數字比較。這是一個問題,因爲按字母順序,10小於4.使用[[ $lines -gt 4 ]]((lines > 4))以獲得數字比較。

+0

這解決了我的問題,也我不知道的問題存在。非常感謝!我會記住未來的cron PATH。 – user1204032