Команда Laravel CPanel Cron Job не запускается - PullRequest
0 голосов
/ 09 ноября 2019

У меня проблема с реализацией задания Cron для моего приложения Laravel на общем сервере Apache / CPanel. У меня есть команда задачи, которая отлично работает всякий раз, когда я запускаю ее из командной строки, а также отлично работает при ежедневном вызове, но она не выполняется по расписанию «Один раз в день».

Ниже описывается Cron Job, когдавызывается каждую минуту, только если команда Laravel также называется everyMinute(), как показано:

Cron call

php -d register_argc_argv=On /home/path/domain.com/artisan schedule:run > /dev/null 2>&1

Расписание сервера * * * * *

Команда Laravel:

$schedule->command('alert:dailly')->everyMinute();

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

Cron call

php -d register_argc_argv=On /home/path/domain.com/artisan schedule:run > /dev/null 2>&1

Расписание сервера 0 0 * * *

Laravelкоманда:

$schedule->command('alert:dailly')->cron('0 0 * * * *');

или

$schedule->command('alert:dailly')->daily();

Что-то не так?

Спасибо!

Ответы [ 2 ]

1 голос
/ 11 ноября 2019

Вам не нужно менять расписание сервера при ежедневном вызове.

На вашем сервере должен быть один ремесленный крон, например:

* * * * * php /path-to-your-project/artisan schedule:run >> /dev/null 2>&1

Этот крон будет называтьсяКаждую 1 минуту, и когда это происходит, Laravel будет оценивать ваши запланированные задания.

Позже ваш код будет использовать ежедневник:

$schedule->command('cmd-name:op')->daily();

Ежедневно будет запускать задание каждый день в полночь.

Для других частот расписания проверьте документы

0 голосов
/ 11 ноября 2019

У меня была похожая проблема, и я так и не узнал настоящую причину. Я решил это, заставив ежедневное выполнение в определенное время и в фоновом режиме. Тогда ваш код будет (при условии, что вы хотите запустить его в 1:30 утра):

$schedule->command('alert:dailly')->dailyAt('01:30')->runInBackground();

Я также заметил, что мне приходилось запускать команды по четверти часа. итак (час): 00, (час): 15, (час): 30 и (час): 45 отработано, (час): 03 например нет.

Это может быть проблема с хостингом (в моем случае A2hosting.com, общий доступ), но база знаний не делает меня мудрее. Это стоит попробовать. Запустите его за раз, когда вы сможете отслеживать процесс с помощью команды Linux top -ac, чтобы вы могли увидеть, действительно ли команда выполняется.

Если это работает для вас, не спрашивайте меня, почему. Я должен был найти это решение для себя методом проб и ошибок.

Я хотел бы указать, как объяснено в этом отчете PHP об ошибке , что ваш вызов cron никогда не достигает register_argc_argv=On аргумент. Попробуйте запустить его без каких-либо аргументов.

php /home/path/domain.com/artisan schedule:run > /dev/null 2>&1

Если иное не рекомендовано вашим хостингом.

...