さまざまな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
このエラーを解決するために提供できるガイダンスをいただければ幸いです。ありがとうございました
基本的にあなたのソリューションは良いです。単純なbash構文エラーが発生しました。 '['と ']'文字の前後にスペースを入れる必要があります:
[ $? == 1 ]
私は私の箱でそれをテストしました、そしてそれは働きます。エラーコード1にのみ反応することが確実でない限り、エラーコードを0([$?-ne 0])としてテストすることもお勧めします。
次のいずれかが機能するはずです。
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>
1つ目は、スクリプトからの戻り値に基づいた論理AND ||
の代わりに、論理OR &&
を使用します(0は成功、その他は失敗)。
2番目は、正常に機能するために[
と$?
の間にスペースが必要でした。