Crontab이 실행하는 스크립트에서 이메일 보내기

Crontab이 실행하는 스크립트에서 이메일 보내기
#!/BIN/BASH
# To alert whenever lsof crosses 80%

maxlimit=32000
echo 'Max limit is ' $maxlimit
tlimit=$(bc <<< $maxlimit*0.8)
echo 'Treshold limit at 80% ' $tlimit
a=$(lsof | wc -l)
echo 'Current usage ' $a
if [ $(bc <<< "$a > $tlimit") -eq 1 ]
then
        echo 'lsof =' $a 'has exceeded 80% of maximum limit' | /usr/bin/Mail -s "ALERT!!!" "*****@cisco.com"
fi

* * * * * bash /root/vasanth/lsef/script.sh

위 스크립트에서 출력은 해당 메일 ID로 이메일을 보내는 것입니다.

수동으로 실행하면 메일이 전송됩니다.

그러나 cron에 예약된 경우에는 메일이 전송되지 않습니다.

문제가 무엇인지 이해하지 못합니다. 어떻게 디버깅할 수 있나요?

답변1

이와 같은 cron 작업의 주요 문제점은 쉽게 디버깅할 수 없다는 것입니다.

일반적으로 cron 작업은 자동으로 작동해야 합니다.오류가 없는 경우, 그러나 오류가 발생하면 매우 자세하게 설명해야 합니다.

EgorVasilev의 답변을 확장하면 다음 명령을 통해 bash 스크립트에서 "디버그 모드"를 쉽게 켤 수 있습니다.

#!/bin/bash -x
exec 2>>/var/log/cron.log

주문하다. 첫 번째는 flags를 통해 스크립트를 해석합니다 -x. 즉, 실행된 모든 명령을 stderr로 가져옵니다.

exec 2>>/var/log/cron.log명령 이란 무엇입니까?아무것도하지 마세요, 대신 추가 모드에서 표준 오류를 로그 파일로 리디렉션합니다. 본질적으로 쉘 인터프리터는 주어진 리디렉션을 사용하여 자체적으로 "재실행"됩니다.스크립트 실행 컨텍스트를 변경할 필요도 없습니다..

답변2

1.첫째: #!/bin/bash대신 사용#!/BIN/BASH

#!/BIN/BASH다음과 같은 스크립트를 실행 하면 :

bash script.sh

..모든 것이 정상입니다.

그러나 다음을 실행하면:

./script.sh

..오류가 발생합니다:

-bash: ./script.sh: /BIN/BASH: bad interpreter: No such file or directory

2.다음 명령을 실행하십시오.

echo 'PATH='$PATH

스크립트 시작 부분에 출력을 추가합니다.

:

# echo 'PATH='$PATH
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

관련 정보