Команды планировщика Laravel 5.5 с cron - PullRequest
0 голосов
/ 07 июня 2018

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

У меня есть 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 * * *' );
...

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

задача: два использует результаты в базе данных, сгенерированной задачей: один и сохраняет вдругой стол.Таблица, используемая задачей: одна только когда-либо читается другими задачами и никогда не записывается.Итак:

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

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

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

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

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

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

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

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

1 Ответ

0 голосов
/ 07 июня 2018

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...