【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 status

他に、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

クリアできた。

キャッシュクリアした途端スケジュールが実行され始めた。今回は、結局キャッシュが悪さしてました。