こんにちは加藤です。
今回は毎月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の絶対パスじゃないとダメみたいです。
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