Задать вопрос
erniesto77
@erniesto77
oop, rb, py, php, js

Laravel >=5. Как создавать/удалять cron задачи на лету?

Всем привет!
Вкратце, нужно при создании нового элемента создавать связанную с ним cron задачу, которая начнется в определенное время (у каждого элемента разное время начала) и перестанет выполнятся по событию на сервере ( например по ajax запросу ).
Подробнее. Допустим, у нас есть модель для создания встреч/конференций "Meeting". Среди параметров каждой встречи есть дата и время ее начала ( $meeting->start_date ) и boolean флаг, указывающий на то что встреча завершена ( $meeting->completed ). Нужно при создании новой встречи создать для нее cron задачу, которая будет каждую минуту отслеживать связанные только с ней данные ( например активность участников встречи ). А при окончании встречи ( когда $meeting->comleted === true ) cron задача встречи должна быть прекращена.
Как бы вы подошли к решению такой задачи ( не обязательно подробно - на уровне алгоритма )? И можно ли обойтись одной cron задачей?
Заранее благодарю за любые полезные подсказки.

UPD: сейчас подготовлены Events события (MeetingCreated, MeetingUpdated, MeetingDeleted) и есть command meeting:start {meeting_id}. Но есть проблема с вызовом команды meeting:start из Job в определенное время
  • Вопрос задан
  • 847 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 1
@ambilight1
Я использую node.js для подобного. Вот совету посмотреть
Мне кажется так будет лучше + нагрузки не какой нету)

Посмотрите в сторону сron.js
Уже задави похожее
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
DJZT
@DJZT
Laravel - code for you
Одно cron задачей. Своеобразный конвеер. Запускать часто. Например раз в 30 сек. И обрабатытвать все объекты
Ответ написан
DIITHiTech
@DIITHiTech
Fullstack javascript developer
Не знаю как там что у LARAVEL, но логика подсказывает что нужно создать минимальный скрипт без обвязки, который будет вызываться cron'ом и обслуживать программные таймеры-задачи и передавать управление на нужную точку входа, если таймер до тикал, обновлять метку времени последнего тика. Данные о тиках таймеров хранить в любой Nosql ДБ в ОЗУ, но и sql сойдет ну худой конец (записей то мало будет), хотя таблицу тоже в озу запихнуть надо. Так это у меня работало когда то... тик (разрешение) кажись был 10минут.
Т.е нужно:
- нафигачить нехитрый скрипт с классом реализовующий интерфейс программных (скриптовых) cron задач.
- один скрипт для опроса таймеров с БД через интерфейс и передачи управления, запускаемый исключительно через cron, с веба доступ запретить.

Кстати, тут походу тоже самое stackoverflow.com/questions/23796257/how-to-schedu...
Ответ написан
Комментировать
seoperin
@seoperin
Full stack web developer. Laravel / Vue
Я делал по другому, но это не всегда подойдёт. Делаем мутатор
protected $appends = ['status'];

function getStatusAttribute() {
	if ($this->start_date >= Carbon::today()->toDateString() or $this->start_date == NULL) {
		return 1;
	} else {
		return 0;
	}
}

Как то так.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы