2012-02-14 3 views
0

명령 줄에서 스크립트를 실행 중이지만 cronjob에 넣을 때 오류가 발생합니다. 필자는 [-e "name"]을 사용하여 파일 존재 여부를 테스트 할 때 특히 문제가되는 범위를 좁혔습니다. 이 우분투 32 비트 데스크탑에서 실행으로, 나는 다음과 같은 스크립트를 작성하고 명령 줄에서 호출 할 때 작동 할 수 있습니다 :Ubuntu 10.04 : [-e] 테스트를 사용할 때 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 데몬에 의해 집어 들기까지 테스트하기 위해서, 나는 터치 명령을 세 번 (shebang) 다음의 줄로 옮겼다. 그래서 그것은 실행되는 첫 번째 명령이다. 이것은 아무것도 생산하지 못합니다. -e와 함께 테스트 된 파일이 글로벌 rx 권한으로 적절한 위치에 있다는 것을 알고 있습니다. 테스트가 성공하려면 + e가 필요할까요? 변수가 서브 쉘에 의해 가려져 있지 않기 때문일 수 있습니다 (내 이해에 따르면, tst는 일종의 정렬 임). 그렇다면 CLI 호출이 실패 할 것이라고 생각합니다.

+0

10 회 중 9 번, cronjob이 작동하지 않으면 (대화 형 세션에서 스크립트가 작동하지만) 일부 환경 변수에 문제가 있습니다. – asf107

+0

테스트중인 파일을/tmp/blah 또는 다른 것으로 echo 한 다음 cron에서 실행하여 예상 한 파일인지 확인하십시오. 그렇지 않다면 아마도 asf107이 말한 것처럼 환경 변수 일 것입니다. – vmpstr

답변

2

$ {USER}이 (가) 정의되고있는 것 같습니다. cronjob으로 달리기의 경우에는 그렇지 않습니다.

+0

나는 bash 테스트에 대해 약간 읽은 후에 그것에 대해 생각했습니다.하지만 $ {IMPORT}/shell _ $ {i} .rn을 테스트함으로써 테스트했습니다. 나는 그것을 테스트 할 때 어리석은 것을 모른다. 그러나 그것은 문제인 것 같다. 이제는 USER ='whoami' 을 입력 했으므로 cron 작업이 제대로 실행될 수 있습니다. 고맙습니다. – Mange

관련 문제