Планировщик задач artisan laravel
Запустил на своем хосте команду php artisan shedule:run, но он выполняетcя только один раз. Мой kernel
$schedule->command('xml:parse')->everyMinute();
Проект висит на виртуальном хостинге, подскажите как можно решить эту проблему.
Ответы (1 шт):
Планирование выполнения задач на сервере
- Выполнением запланированных в Laravel заданий занимается команда
schedule:run - В свою очередь её непосредственным вызовом занимается планировщик задач, той системы, на которой развернут проект.
Если проект работает на unix'е (с вероятностью 99.9% так и будет), то этим будет заниматьсяCRON
Соответственно, Вам необходимо в CRON запланировать выполнение команды schedule:run.
Для этого необходимо знать путь к папке в которой расположен ваш проект.
Допустим, что этой папкой является /var/www/project/
Нам необходимо отредактировать файл с расписанием CRON'а
Сам файл находится как правило по пути: /etc/crontab
Отредактировать в терминале его можно с помощью nano
nano /etc/crontab
И там вам нужно добавить следующую строку
* * * * * cd /var/www/project && php artisan schedule:run >> /dev/null 2>&1
Разберем что там происходит:
* * * * *- это значит каждую минуту, каждый час, каждый день и т.д. (то есть ежеминутно)cd /var/www/project- это переход в папку вашего проекта&&- данный оператор говорит, что команда справа должна выполниться вместе с левой, при условии что предыдущая команда завершилась усешноphp artisan schedule:run- выполняем командуschedule:runдля запуска запланированных в даравел задач>> /dev/null 2>&1- это мы перенаправляем поток вывода в виртуальное устройство, которое как черное дыра поглатит весь вывод из команды без возможности вернуть его обратно. В противном случае можете перенаправить поток в какой-то лог-файл
ВНИМАНИЕ!
НЕ ЗАБУДЬТЕ ЗАМЕНИТЬ/var/www/projectНА ПУТЬ ДО ВАШЕГО ПРОЕКТА!
Планирование выполнения задач на локальном компьютере в среде разработки
В среде разработки на локальном компьютере как правило не требуется постоянное выполнение заданий
Их выполнение требуется, как правило, только при решении связанных с этими командами задач.
И для этого в Laravel есть команда:
php artisan schedule:work
Пока она запущена - планировщик Laravel будет выполнять запланированные задания
Источники:
- Запуск планировщика в производственной среде:
https://laravel.com/docs/9.x/scheduling#running-the-scheduler - Запуск планировщика на локальной машине в среде разработки:
https://laravel.com/docs/9.x/scheduling#running-the-scheduler-locally