Crontab에서 If 문을 사용하여 경고 생성

Crontab에서 If 문을 사용하여 경고 생성

다양한 PHP 스크립트를 실행하는 약 100개의 Cron 작업이 있는 서버가 있습니다. 현재 작업은 PHP 스크립트 실행 중 오류가 발생할 때 경고를 생성하는 것입니다.

크론 설정은 다음과 같습니다.

30 08 * * * /usr/bin/php /var/www/html/phpscirpt1.php > /var/www/html/phpscript1.log 2>&1

내가 시도한 것은 &&끝에 하나를 넣는 것이었지만 어쨌든 경고 이메일이 생성됩니다.

30 08 * * * /usr/bin/php /var/www/html/phpscript1.php > /var/www/html/phpscript1.log 2>&1 && <Generate Mail>

작동해야 하는 이상적인 상황은 다음과 같습니다.

 /bin/bash /home/myUser/testfile.sh > /home/myUser/testfile.log 2>&1 ; [$? == 1] && /bin/bash script.sh

다음은 테스트 목적의 예시일 뿐입니다.

/bin/bash /home/myUser/testfile.sh > /home/myUser/testfile.log 2>&1

testfile.sh를 실행하면 디렉터리만 생성됩니다. 위 명령을 처음 실행하면 echo $?출력이 제공되지만 0명령을 다시 실행하면 1스크립트가 반환되고 오류가 기록됩니다.

mkdir: cannot create directory `/home/myUser/testdir': File exists

기본적으로 이것이 필요한 것입니다. 즉, cron의 스크립트가 실패할 때마다 이메일 형식으로 경고를 생성해야 합니다. 위의 예에는 이메일을 보내는 명령이 script.sh포함되어 있습니다 .mail -s

하지만 전체 명령을 실행하면 아래와 같이 오류가 반환됩니다.

/bin/bash /home/myUser/testfile.sh > /home/myUser/testfile.log 2>&1 ; [$? == 1] && /bin/bash script.sh
-bash: [1: command not found

이 오류를 해결하기 위한 지침을 제공해 주시면 매우 감사하겠습니다. 감사해요

답변1

기본적으로 솔루션이 좋습니다. 방금 간단한 bash 구문 오류가 발생했습니다. "[" 및 "]" 문자 주위에는 공백을 넣어야 합니다.

[ $? == 1 ]

내 상자에서 테스트했는데 작동합니다. 또한 오류 코드가 0이 아닌지 테스트하는 것이 좋습니다([$?-ne 0]), 오류 코드 1에만 반응하려는 것이 확실하지 않은 경우.

답변2

다음 중 하나가 작동해야 합니다.

30 08 * * * /usr/bin/php /var/www/html/phpscript1.php > /var/www/html/phpscript1.log 2>&1 || <Generate Mail>
30 08 * * * /usr/bin/php /var/www/html/phpscript1.php > /var/www/html/phpscript1.log 2>&1 ; [ $? -ne 0 ] && <Generate Mail>

첫 번째는 스크립트의 반환 값(성공의 경우 0, 실패의 경우 기타)을 기반으로 하는 논리적 AND ||대신 논리적 OR을 사용합니다.&&

[두 번째는 $?제대로 작동하려면 와 사이에 공간이 필요합니다.

관련 정보