cron에서 실행할 때 쉘 스크립트가 실패함

cron에서 실행할 때 쉘 스크립트가 실패함

누구든지 나를 도와줄 수 있나요? 몇 시간 동안 문제로 어려움을 겪고 있지만 해결할 수 없는 것 같습니다.

쉘을 통해 이 스크립트를 실행하면 작동하고 나에게 전송된 올바른 이메일 출력도 수신하지만 cronjob을 통해 실행하면 항상 백업 실패 메시지가 표시되며 이는 올바르지 않으며 수동으로 작동합니다.

#dokuwiki related
dokudate1=$(date +"%d.%m.%y - %H.%M")
host=$(hostname)
dokudate=$(date +"%m-%d")
dokufunc=$(find|grep "dokuwiki"|grep "$dokudate" > doku.txt)

#tw related
twdate1=$(date +"%d.%m.%y - %H.%M")
host=$(hostname)
twdate=$(date +"%d.%m")
twfunc=$(find|grep "torzon"|grep "$twdate" > tw.txt)

fc1(){
$dokufunc
if
grep -R "dokuwiki" doku.txt > /dev/null
then
echo "..."
echo "dokuwiki backup successfull"
echo -en "dokuwiki backup success!" | mail -s "dokuwiki backup check successfull!" mymail.com
rm doku.txt
else
echo "dokuwiki backup fail"
echo -e "dokuwiki backup fail!" | mail -s "dokuwiki backup check failure!" mymail.com
fi
}


fc2(){
$twfunc
if
grep -R "torzon" tw.txt > /dev/null
then
echo "..."
echo "torzon backup successfull"
echo -en "torzon backup success!" | mail -s "torzon backup check successfull!" mymail.com
rm tw.txt
else
echo "torzon backup fail"
echo -e "torzon backup fail!" | mail -s "torzon backup check failure!" mymail.com
fi
}

fc1

fc2

echo "done"

감사해요!

답변1

어떤 배포본을 사용하고 있는지 잘 모르겠지만 cron 스크립트는 일반적으로 대화형 셸보다 덜 "멋지"는 최소 셸을 사용하여 실행됩니다. 이것이 전체 스크립트입니까? 그렇다면셰르본적절한 컨텍스트를 로드합니다.

또한 내장된 셸 명령 이외의 작업에 정규화된 경로를 사용하는 데 도움이 됩니다. 예를 find들어 에 위치할 수 있습니다 /usr/bin/find. 다음 which명령을 사용하여 이러한 문제를 해결할 수 있습니다.

[me@host ~]$ which find
/usr/bin/find

궁극적으로 DopeGhoti가 제안한 대로 cron 스크립트의 출력을 어딘가에 기록해야 합니다(stdout 및 stderr 캡처). 예를 들어,

  0 23 * * * /home/user/backup_script.sh >> /var/log/backup.log 2>&1

관련 정보