About connecting the dots.

data science related trivial things

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日間くらいかかってしまい,えらく高いコストを払うはめになってしまいました...