#php #laravel-5
#php #laravel-5
Вопрос:
Мне было интересно, есть ли в Laravel встроенная функция для запуска запланированной задачи только в том случае, если предыдущая завершена.
Мне нужно запускать определенную задачу каждые несколько секунд, но задача зависит от запроса другого хоста, который может в какой-то момент потерять соединение.
Есть несколько способов, которыми я думал об этом, если нет:
- Выполнение задачи просто помещает задание в очередь
- Сохранение флага (либо в виде файла, либо в базе данных), который устанавливается в начале задачи и снимается в конце.
Просто надеюсь, что в планировщике задач есть что-то встроенное, прежде чем я пойду по любому из этих маршрутов…
Ответ №1:
Нашел ответ в документах : D
https://laravel.com/docs/5.3/scheduling
выдержка:
Предотвращение дублирования задач
По умолчанию запланированные задачи будут выполняться, даже если предыдущий экземпляр задачи все еще запущен. Чтобы предотвратить это, вы можете использовать метод withoutOverlapping:
$schedule->command('emails:send')->withoutOverlapping();
В этом примере emails:send
команда Artisan будет выполняться каждую минуту, если она еще не запущена. withoutOverlapping
Метод особенно полезен, если у вас есть задачи, которые сильно различаются по времени выполнения, что не позволяет точно предсказать, сколько времени займет данная задача.