cronでPHPのバッチがコケた時の解決法のイメージ

こんにちは加藤です。
今回は毎月Slackで通知しているメッセージを自動投稿したい!
ということで、cronを使った実装ついて書いていこうと思います。

cronやcronの設定については、以前菊島さんがブログで書いてくれていたので割愛しますが、crontabに書いたコマンドは

0 15 28-31 * * php /path/to/notification.php `date -d +1 day +\%d` -eq 1

こんな感じで、「月末の15時にファイルを実行」という内容を追加しました。
ローカルのDocker環境では実行できていたので、そのまま本番環境(Docker環境ではない)でも追加。
でも当日の15時にSlackを見てみると、通知が来ていない……ローカル環境では問題なかったので、cron側でエラーが起きていると思い、ログを確認するとやっぱり実行されていませんでした。

試行錯誤した結果、原因は「PHPのパス」でした。
今回の場合だと

0 15 28-31 * * php /path/to/notification.php `date -d +1 day +\%d` -eq 1

このphpの部分、本来はphpの絶対パスじゃないとダメみたいです。

$ which php
/path/to/php

phpの絶対パスは上記で確認できますので、このパスをコピーしてcrontabに追記すれば動くようになります。

0 15 28-31 * * /path/to/php /path/to/notification.php `date -d +1 day +\%d` -eq 1

cronがなぜか動かない……という場合はphpでなくても絶対パスにして動作検証してみてください。
今回は以上です。

参考資料

【PHP】バッチ処理をcronで自動実行する
https://qiita.com/yukibe/items/cd5b59122804223698d0