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

私が試したことは&&最後に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 ]

私のボックスでテストしましたが、うまくいきます。また、エラーコードがゼロでないことをテストすることをお勧めします([$?-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を使用します。&&

[2つ目は$?正しく機能するためにとの間にスペースが必要です。

関連情報