명령 줄에서 스크립트를 실행 중이지만 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 호출이 실패 할 것이라고 생각합니다.
10 회 중 9 번, cronjob이 작동하지 않으면 (대화 형 세션에서 스크립트가 작동하지만) 일부 환경 변수에 문제가 있습니다. – asf107
테스트중인 파일을/tmp/blah 또는 다른 것으로 echo 한 다음 cron에서 실행하여 예상 한 파일인지 확인하십시오. 그렇지 않다면 아마도 asf107이 말한 것처럼 환경 변수 일 것입니다. – vmpstr