読者です 読者をやめる 読者になる 読者になる

About connecting the dots.

statistics/machine learning adversaria.

crontab表記の間違いにはまったこと

よくある処理で,30 秒おきにバッチを実行するcrontabを設定してたんですが,これがどうやら正常に終了せず延々と繰り返し実行され続け,最終的にプロセス過多で落ちるなんてことが,この前ありました.

設定してたのがこんな感じ.

* * * * * /usr/bin/php /home/testuser/bin/executeJob.php 2>&1 > /tmp/executeJob.log; sleep 30; /usr/bin/php /home/testuser/bin/executeJob.php 2>&1 > /tmp/ExecJob.log

これの問題点は,"2>&1"の場所がおかしいということです.この書き方だと,終了コードごとexecuteJob.logに飛ばされてしまうので,システムが終了コードをキャッチできなくて延々と同じ処理を繰り返してしまうことになるっぽいです.そんなわけで,以下のような正しい書き方にしましょうというお話でした.

* * * * * /usr/bin/php /home/testuser/bin/executeJob.php > /tmp/executeJob.log 2>&1; sleep 30; /usr/bin/php /home/testuser/bin/executeJob.php > /tmp/ExecJob.log 2>&1

ほんと,この間違いを突き止めるのに2日間くらいかかってしまい,えらく高いコストを払うはめになってしまいました...