我從命令行運行的腳本很好,但在放入cronjob時失敗。我已經縮小到專門用[-e「name」]測試文件存在的問題。隨着Ubuntu的32位桌面此運行,我可以寫下面的腳本,並使其工作在命令行調用時:當使用[-e]測試時,Ubuntu 10.04:bash腳本在cronjob中失敗
#!/bin/bash
# define statements
IMPORT="/home/${USER}/data_imports/fitb"
ARCHIVE="${IMPORT}/archive"
declare -a CENTERS
CENTERS[0]="ct"
CENTERS[1]="ny"
len=${#CENTERS[*]}
RUNDATE=`date --date=yesterday +"%m%d"`
ARCHIVEDATE=`date --date=yesterday +"%Y_%m_%d"`
i=0
while [ $i -lt $len ]; do
if [ -e "${ARCHIVE}/fitb_${ARCHIVEDATE}_${CENTERS[i]}.csv" ]
then touch ~/data_imports/fitb/shell_${i}.rn
fi
let i++
done
如果我行註釋掉「如果」,「然後」,&「 fi「之後,while循環在cronjob中運行正常。如果我把if測試放回去,我什麼也得不到。爲了測試它是否被cron守護進程拾取,我將touch命令移到了shebang之後的行中,所以它是第一個運行的命令。這不能產生任何東西。我知道使用-e進行測試的文件位於正確的位置,具有全局rx權限。難道是因爲-e需要+ w才能使測試成功嗎?我認爲這可能是由於變量沒有被subhell(其中,據我瞭解,tst是一種排序)所致,但是如果是這樣的話,我會認爲CLI調用也會失敗。
如果cronjob無法正常工作(但腳本在交互式會話中工作),則有9次出現10次,但有一些環境變量存在問題。 – asf107 2012-02-14 18:06:00
嘗試將您正在測試的文件回顯到/ tmp/blah或其他內容中,然後從cron運行該文件,以查看這是否是您期望的文件。如果不是,那麼它可能是環境變量,就像asf107建議的 – vmpstr 2012-02-14 18:10:54