2012-02-14 46 views
0

我從命令行運行的腳本很好,但在放入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調用也會失敗。

+0

如果cronjob無法正常工作(但腳本在交互式會話中工作),則有9次出現10次,但有一些環境變量存在問題。 – asf107 2012-02-14 18:06:00

+0

嘗試將您正在測試的文件回顯到/ tmp/blah或其他內容中,然後從cron運行該文件,以查看這是否是您期望的文件。如果不是,那麼它可能是環境變量,就像asf107建議的 – vmpstr 2012-02-14 18:10:54

回答

2

您似乎正在依靠定義$ {USER}。當作爲cronjob運行時情況並非如此。

+0

在閱讀了關於bash測試的一些信息之後,我想到了這一點,但是我通過觸及$ {IMPORT}/shell _ $ {i} .rn來測試它。我不知道我在測試中弄亂了什麼,但似乎是這個問題。有可能我已經把 USER ='whoami' 放入,因爲cron作業現在可以正常運行。謝謝。 – Mange 2012-02-14 19:30:28

相關問題