планировщик cron для проекта laravel

Обсуждение общих вопросов связанных с программой
azik_ismat
Сообщения: 2
Зарегистрирован:
25 окт 2018, 13:34

планировщик cron для проекта laravel

azik_ismat » 25 окт 2018, 15:37

Нужна помощь и совет: Как настроить в опенсервере планировщик для проекта Laravel? Перепробовал варианты по докам лары - не работает . По докам опенсервера не понятно в каком месте вставить shedule - лары?

Заранее спасибо.
vlad_luxor
Сообщения: 79
Зарегистрирован:
15 июн 2014, 22:12

Re: планировщик cron для проекта laravel

vlad_luxor » 25 окт 2018, 19:28

Всё детально описано здесь

Если кратко, то:
1) OSPanel - Настройки - Планировщик заданий.
"Минута / Час / Число / Месяц / День недели" выставить *
"Выполнить" ввести "путь к проекту/artisan schedule:run >> /dev/null 2>&1". Я делал "путь к проекту/artisan schedule:run" и этого хватало (но не факт, что так нужно делать).

2) Laravel. В файле "путь к проекту/app/Console/Kernel.php" в методе schedule (док) с помощью методов объекта $schedule, который передается как параметр, (смотри ссылку ранее, но в разделе "Настройки частоты планировщика" - все методы отлично описаны) выставляешь частоту выполнения, аргументом методу передаешь анонимную функцию, в которой "твори, что хочется" - вызывай свои методы из допустимых (читать как подключенных) namespaces.

Примеры как добавлять задачи в методе schedule (взял из своего проекта):
/*
	Cron - мой класс со статическими методами,
	специально под планировщик
//*/

$schedule->call(function(){
	// указываем функцию для выполнения
	Cron::createCropioTasks();
	// в ней вызываем свою
})
->everyMinute()
// выполнять каждую минуту
->name("cropio-tasks")
// именуем задание, чтобы при повторном вызове ...
->withoutOverlapping();
// ...  она не накладывалась на предыдущий вызов этой задачи,
// если предыдущий вызов длится дольше минуты

$schedule->call(function(){
	// тоже самое, указываем функцию для выполнения
	Cron::createTravelFactCropio();
	// в ней вызываем что-то свое
})
->everyTenMinutes()
// каждые десять минут
->name("cropio-fact")
// именуем задачу
->withoutOverlapping();
// и говорим "не запускайся, ...
// ... пока предыдущий твой вызов не завершился"

Все очень просто, и к тому же планировщик, в основном, настраивать нужно не на сервере, а в самом проекте.

Удачи!
girmate
Сообщения: 3
Зарегистрирован:
27 мар 2017, 01:27

Re: планировщик cron для проекта laravel

girmate » 06 дек 2018, 08:29

Возможно автор забыл упомянуть, что перед путем к файлу artisan необходимо написать php, иначе ничего выполняться не будет (никакие кавычки я не пишу и с ">> /dev/null 2>&1" у меня не работает):

php C:\OSPanel\domains\mysite.loc\artisan schedule:run

Также следует добавить, что у меня на win7, Laravel 5.7 и последней версией OpenServer очереди не запускаются, если задание пишу так:

$schedule->command('queue:work')->everyMinute()->name("project_job")->withoutOverlapping();

Но если убрать метод ->withoutOverlapping():
$schedule->command('queue:work')->everyMinute();

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

А у кого как запускается это дело?
Ответить