Предотвращение перекрытия задания, вызываемого в коде, с заданием, выполняемым в фоновом режиме в Laravel

В Laravel я выполняю работу в своем коде, как это

Artisan::queue('mediaserver:process-queue', ['index' => $indexName]);

Одну и ту же работу планируется выполнять в фоновом режиме каждый час. Иногда я хочу вызвать его через мой пользовательский интерфейс (например, через код), чтобы ускорить процесс. Я должен предотвратить то, что процесс запускается, когда он всегда работает в фоновом режиме.

Каков наилучший метод работы для этого?

1

Решение

Планировщик задач Laravel обрабатывает перекрывающиеся задания создание временного файла до запуска команды и уничтожение его после.

Имя файла основывается на выражении расписания cron и имени команды.

Наличие этого файла приводит к тому, что последующие попытки запуска той же команды будут пропущены

Я бы сделал что-то похожее на это. В верхней части вашего mediaserver:process-queue Задача я бы проверить, если временный файл с именем что-то вроде mediaserver__process_queue существовал в storage/, Если это произойдет, выйти. Если это не создает его. Уничтожьте его, когда задача закончится.

Вам просто нужно быть осторожным в том, как вы справляетесь со сценариями, в которых задача неожиданно завершает работу из необработанного исключения, что приводит к mediaserver__process_queue остаться, даже если задача больше не выполняется.

2

Другие решения

В Laravel я выполняю работу в своем коде, как это

Artisan::queue('mediaserver:process-queue', ['index' => $indexName]);

Одну и ту же работу планируется выполнять в фоновом режиме каждый час. Иногда я хочу вызвать его через мой пользовательский интерфейс (например, через код), чтобы ускорить процесс. Я должен предотвратить то, что процесс запускается, когда он всегда работает в фоновом режиме.

Каков наилучший метод работы для этого?

1

Планировщик задач Laravel обрабатывает перекрывающиеся задания создание временного файла до запуска команды и уничтожение его после.

Имя файла основывается на выражении расписания cron и имени команды.

Наличие этого файла приводит к тому, что последующие попытки запуска той же команды будут пропущены

Я бы сделал что-то похожее на это. В верхней части вашего mediaserver:process-queue Задача я бы проверить, если временный файл с именем что-то вроде mediaserver__process_queue существовал в storage/, Если это произойдет, выйти. Если это не создает его. Уничтожьте его, когда задача закончится.

Вам просто нужно быть осторожным в том, как вы справляетесь со сценариями, в которых задача неожиданно завершает работу из необработанного исключения, что приводит к mediaserver__process_queue остаться, даже если задача больше не выполняется.

active «data-shortcut =» A
самый старый «data-shortcut =» O
голосует «data-shortcut =» V
2
По вопросам рекламы [email protected]