【Laravel】サーバ再起動でcronタスクスケジュールが実行されなくなった
状況
サーバのcronを使ってschedule:runを実行させてjobを処理させていたんですが、ある時サーバを再起動したらjobが実行されなくなった。
そんな時に試してみる事
サーバ側の確認
crontabが設定されているか確認
#内容確認
crontab -e
#一覧表示
crontab -l
cronが実行されているか確認
sudo systemctl status crond.service
#CentOS7以前
sudo service crond status
cron再起動
sudo systemctl restart crond.service
#CentOS7以前
sudo service crond restart
他に、cronが動かない原因として権限周りが結構関係している場合が多いが、今回は今まで動いていたので関係がない。
Laravel側の確認
直接schedule:runを実行してみる
php artisan schedule:run
今回このコマンドで以下のメッセージが表示された
No scheduled commands are ready to run.
Kernel.php内のスケジュールが毎分以外の場合や条件付きでスケジュールされていて実行するものがない場合にこう表示されるようです。
今回、cron側もLaravel側も正常に動いてるっぽいが、スケジュールが実行されない。。。
最後にキャッシュクリアしてみる。
php artisan cache:clear
環境によっては、以下のメッセージが表示されてクリアできない。
Failed to clear cache. Make sure you have the appropriate permissions.
これは、「storage/framework/cache/data」をクリアするコマンドなので、このディレクトリが存在しない場合、または、ファイルに対して権限がない場合に表示される。
今回はディレクトリは存在しているので、管理者権限で実行。
sudo php artisan cache:clear
クリアできた。
キャッシュクリアした途端スケジュールが実行され始めた。今回は、結局キャッシュが悪さしてました。