Laravel кастомная artisan команда не выполняется без optimize:clear
Проблема звучит странно, я не знаю, как она появилась, всё на сервере работало хорошо.
У меня есть сложный алгоритм, который каждую минуту обрабатывает пару тысяч записей в бд и обновляет их. Он выполняется примерно за 10-15 секунд.
Как я запускаю алгоритм?
- На сервере в cron кадую минуту вызываю
php artisan schedule:run
- В App/Console/Kernel.php находится такой код:
// Every minute update mining data for every rig
$schedule->command('mining:run')->everyMinute();
// ВНИМАНИЕ. Без этой очистки кэша вообще очереди перестают вызываться
$schedule->command('optimize:clear')->everyMinute();
// Restart queue every day
$schedule->command('queue:restart')->cron('0 0 * * *');
// Configure running queues
$schedule->command('queue:work --tries=3')
->cron('* * * * *')
->withoutOverlapping();
- В App/Console/Commands находится MiningRunCommand.php, в котором вызывается
MiningRunJob::dispathc()
- В самом job'е у меня 2 лога о старте и завершении выполнения алгоритма, а между ними сам алгоритм, который обрабатывает, напомню, несколько тысяч записей в бд. КОТОРЫЙ 2 ДНЯ НАЗАД РАБОТАЛ НОРМАЛЬНО 5+ месяцев.
Так вот, раньше в логи у меня каждую минуту выводилось start
, а потом end
- алгоритм начал выполняться, а потом закончил. Всё хорошо. Но 2 дня назад просто так он перестал выполняться. Я что-то потыкал, 200 раз перезапустил очереди, очистил кэш и тд и тп, вроде заработало после того, как я начал вызывать каждую минуту optimize:clear
- это very bad practive, скороее всего. Но, почему-то теперь БЕЗ ОШИБОК в логах я вижу такую картину: start start start end start end start start end
.
То есть некоторая часть запусков алгоритма завершается, а некоторая - нет (start есть, а end нет). И НЕТ НИКАКИХ ОШИБОК. В т.ч в failed jobs
Наведите на мысль, что могло произойти и как это пофиксить. Почему без очистки очереди не работают?