Команды планировщика Laravel 5.5 с cron

Любая помощь по этому вопросу будет очень признательна.

У меня есть 15 задач, выполняемых в определенное время. Важно, чтобы они запускались в это время, поскольку они создают свои данные на основе первой запущенной задачи cron. Вот пример:

$schedule->command( 'task:build one' )->cron( '2/5 * * * *' );
$schedule->command( 'task:build two' )->cron( '3/15 * * * *' );
$schedule->command( 'task:build three' )->cron( '3 * * * *' );
$schedule->command( 'task:build four' )->cron( '4 */12 * * *' );
...

Используя task: two в качестве примера, проблема выглядит следующим образом:

task: two использует результаты в базе данных, сгенерированные задачей: one, и сохраняет их в другой таблице. Таблица, используемая задачей: одна задача ВСЕГДА читается другими задачами и никогда не записывается. Так:

задача: один работает и занимает меньше минуты. задача: два начинается через минуту.

В редких случаях (может быть, до 8 раз в неделю, кажется случайным) задача: два откладываются так долго, что задача: одному удается запустить снова (через 5 минут) и добавить дополнительную строку в свою таблицу, поэтому к задаче времени: two получает данные, которых у него больше, чем нужно.

Из моих собственных исследований:

  1. Нет проблем с тупиком sql, поскольку каждая задача записывает только в таблицу, специфичную для себя, и я не вижу никаких журналов ошибок mysql.

  2. База данных составляет ок. 5GIG, работающий на дешевом сервере Digital Ocean за 20 долларов.

  3. Из 15 задач кажется, что некоторые задачи выполняются больше, чем другие, а некоторые никогда не выполняются.

Я не разработчик, и я пытаюсь определить, является ли это проблемой Laravel, возможно, из-за моей плохой реализации или проблемы с сервером.

Я надеюсь, что это достаточно хорошо описывает проблему, чтобы получить помощь, но если нет, дайте мне знать, какая дополнительная информация вам нужна.

Есть ошибки PHP? Есть ли у вас журнал вывода каждого шага ваших задач, чтобы увидеть, где он замедляется? Всегда ли завершается вторая задача, даже если она выполняется медленно? Какова нагрузка на сервер в то время? Может ли это замедлить его? В чем разница между второй задачей и всеми остальными задачами, из-за которых только одна может иногда выполняться медленно?

fubar 07.06.2018 04:17

Никаких ошибок PHP. Все исключения отправляются в Slack, так что я знаю, а не получаю. Да, все задачи завершаются, и у меня есть однострочный журнал для каждой задачи с отметкой времени их завершения. Я также вижу из базы данных created_at, что они задерживаются.

Andy 07.06.2018 04:25

@fubar Загрузка сервера в это время тоже кажется нормальной. Из 15 задач примерно 4 кажутся выполненными. И это кажется случайным. Они не в одно и то же время.

Andy 07.06.2018 04:33

Вы переименовали задачи для этого вопроса, или это действительно одна команда task: build, которая принимает параметры (один, два, три, четыре)?

sisve 07.06.2018 05:45

Да, это одна команда, которая каждый раз использует разные таблицы.

Andy 07.06.2018 14:47
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
5
262
1

Ответы 1

Вы можете использовать функцию laravel, называемую перекрытием задач, с помощью команды $schedule->command('emails:send')->withoutOverlapping(10); Чтобы узнать больше, перейдите по ссылке https://laravel.com/docs/5.5/scheduling#preventing-task-overlaps.

Ссылка на решение приветствуется, но убедитесь, что ваш ответ полезен и без нее: добавить контекст вокруг ссылки, чтобы ваши друзья-пользователи имели некоторое представление о том, что это такое и почему оно есть, а затем процитируйте наиболее релевантную часть страницы, на которую вы ссылаетесь. если целевая страница недоступна. Ответы, которые представляют собой не более чем ссылку, могут быть удалены.

sisve 07.06.2018 05:51

withoutOverlapping () здесь не поможет, но спасибо.

Andy 07.06.2018 07:05

Другие вопросы по теме