Спасибо за наводку в статье! Тоже изучаю сейчас этот вопрос. Оптимальное решение на мой взгляд:
В Crontab должна быть одна единственная запись:
* * * * php /path/to/artisan schedule:run >>/dev/null 2>&1
Все остальные команды должны запускаться уже в методе schedule класса Kernel.
$schedule->command('queue:work --once')->withoutOverlapping()->everyMinute();
или
$schedule->command('queue:work --stop-when-empty')->withoutOverlapping()->everyMinute();
4. Эта музыка будет вечной, если я заменю батарейки
Вы наверное заметили, что команда php artisan queue:work не закончилась после того как все задания в очереди выполнились. Она ждёт новых заданий! Вы можете прервать выполнение нажав Ctrl+C.
Обратите внимание на метод withoutOverlapping(). Это защита от наложения…
Спасибо, очень полезная информация.