2015-05-13 131 views
1

我在shell腳本中使用以下命令:手動運行,但是當shell腳本不是通過cron的工作,但手動

echo "1" > log.txt 
if [ `ifconfig eth0 | grep 'inet addr' | cut -d ":" -f 2 | 
awk {'print $1'}` = 'ipaddress' ] && [ `whoami` = 'userid' ]; then 
echo "2" >> log.txt 
crontab -l > Cron.txt 
echo "3" >> log.txt 
fi 

腳本運行正常時,通過cron的計劃,它 stucks在這個IF。

cron entry: 31 11 * * * /home/abc/cron_backup.sh 

產出log.txt的手動運行:打印1,2,3的log.txt通過 的cron:在log.txt的打印1

+0

你如何手動運行你的命令? – Xtof

+0

./cron_backup.sh – shal

+0

你的操作系統是什麼? –

回答

0

我建議把你的腳本作爲第一線命令解釋器行#!確保sh會運行它

之後,你有沒有考慮使用雙括號語法[[]]?

#!/bin/sh 
echo "1" > log.txt 
if [[ `ifconfig eth0 | grep 'inet addr' | cut -d ":" -f 2 | 
awk {'print $1'}` = 'ipaddress' ]] && [[ `whoami` = 'userid' ]]; then 
echo "2" >> log.txt 
crontab -l > Cron.txt 
echo "3" >> log.txt 
fi 
+0

用'#!/ bin/bash'而不是'#!/ bin/sh'更好嗎? – Thronghar

+0

謝謝......我包括#!/ bin/sh,但它仍然不能從cron工作。雙支架的目的是什麼? – shal

+0

由於手動運行時腳本運行成功,因此不應該出現語法問題...正確。我已經嘗試了#!/ bin/bash和#!/ bin/sh。還有雙括號[[]]。 – shal

0

問題可能出在ifconfig,grep,cut awk和whoami調用。當你從命令行運行它時,你有你的配置文件,它有你的PATH設置。

當它從cron運行時,它沒有您的配置文件。如果你修改PATH變量來指向這些程序的位置,那麼當你從cron運行時你不會有這種改變。

嘗試放入每個命令的完整路徑,並看到它從cron運行時會有所不同。

相關問題