Help us understand the problem. What is going on with this article?

Laravelのスケジューラでの排他制御(withoutOverlapping)について

More than 1 year has passed since last update.

問題

ある日、アクセス集中によりサーバーがダウンする事態に見舞われた。
その後、サーバーを再起動してもバッチ処理が正しく実行されない問題が発生した。
バッチ処理はLaravelのスケジューラにより定期実行している。

原因

吐かれていたログは、

No scheduled commands are ready to run.

そういえばスケジューラで
多重起動の防止の設定をしていた。(withoutOverlapping()の指定。)

// 例
$schedule->command('emails:send')->withoutOverlapping();

どうやら、処理が正常に終了しなかったため、ロックファイルが残り続けており、その後の処理がスキップされてしまっていたようだった :cry:

対策

/storage/framework配下にロック用のファイル(schedule-XXXXXXXX)が生成されていたので、削除した。まぁ、それだけ。

その後、バッチは元気に仕事を再開してくれました :thumbsup_tone2:

補足:ロック用のファイルのファイル名

    /**
     * Get the mutex name for the scheduled command.
     *
     * @return string
     */
    public function mutexName()
    {
        return 'framework/schedule-'.sha1($this->description);
    }
tech31
フリーランスでご飯を食べてる系の人。 子供と犬と自然が大好き。日々、マナブと学ぶ。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした