【Laravel】なぜかバッチが動かなかったときに確認すること(メモ)

月次で動いているはずのバッチ処理がなぜか失敗していたので






解決までの工程

  1. ログを見る
  2. 問題を突き止める
  3. 問題を解消する
  4. バッチを手動で動かす
  5. バッチが正常に動作したことを確認



今回の場合

一口に「バッチが動かなかった」といっても原因は様々あると思いますが、今回の場合はキャッシュディレクトリのパーミッションが問題でした。

エラーログ(抜粋)

[2022-09-02 18:52:11] production.ERROR: ErrorException:
file_put_contents(/laravel/storage/framework/cache/data/bb/4a/bb4ae8f5e998cd34801f35e16028a2a021982b1b):
failed to open stream: No such file or directory in /laravel/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php:122


確認してみると「/laravel/storage/framework/cache/data/bb/4a/」は確かに存在していませんでした。キャッシュディレクトリが作れない場合にありがちなのはパーミッションの問題なので、調べてみると「/laravel/storage/framework/cache/data」以下がこんな状況に。


drwxrwxrwx   3 apache   apache   4096 Mar 16  2021 a9
drwxrwxrwx   3 ec2-user ec2-user 4096 May  1  2021 aa
drwxrwxrwx   4 ec2-user ec2-user 4096 Jul  1 03:15 ab
drwxrwxrwx   4 ec2-user ec2-user 4096 Apr  1 03:15 b0
drwxrwxrwx   3 ec2-user ec2-user 4096 Dec  1  2021 b1
drwxrwxrwx   3 ec2-user ec2-user 4096 Sep  1  2021 b7
drwxr-xr-x   3 apache   apache   4096 Jul 30 00:36 b8
drwxrwxrwx   4 apache   apache   4096 Aug  1  2021 b9
drwxr-xr-x   3 apache   apache   4096 Apr  4 01:24 bb


なんなん……

ユーザーが「ec2-user」のものと「apache」のものが混ざっていて、さらにパーミッションも「777」と「755」が混じっています。恐らく「ec2-user」で「755」であれば大丈夫だと思うんですけど、「apache」で「755」だとその下にディレクトリを生成出来ないんじゃないかな。ちょうどエラーが出ていた「/laravel/storage/framework/cache/data/bb」ディレクトリがそんな感じでした。



ユーザーとパーミッションを一括で更新して解決

$ sudo chmod 777 /laravel/storage/framework/cache/data/*
$ sudo chown ec2-user:ec2-user /laravel/storage/framework/cache/data/*


本当は実行ユーザーが異なる(apacheになっている)プログラムを突き止めて修正すべき(それが根本的な解決)で、それをしない限りまたいずれディレクトリが生成されて同じ問題が出ることにはなるんですが、、個人サーバだしその時はその時で。とりあえずはこれで対応。



そろそろLaravelバージョン上げたいんですけどねー。LightsailのPHPが古いままなので上げられません。こういうのはやっぱり安いなりなんだよなあ。