Laravel CRON работает только по команде вручную, и не запускает команду everyMinute - PullRequest
0 голосов
/ 18 октября 2019

У меня уже есть приложение laravel 5.4 в AWS Ubuntu, в моем проекте у меня есть команда для отправки электронной почты EveryMinute для пользователя. Это работает нормально, если я запускаю команду php artisan activity:update, и если я запускаю php artisan schedule:run, это также работает хорошо, и пользователь получил это письмо только один раз.

Тем не менее, я до сих пор не знаю, почему функция everyMinute в команде не работает, и я не могу получить электронное письмо everyMinute.
Мой Kernal:

protected $commands = [
    Commands\Inspire::class,
    Commands\ActivityDateChecker::class,
    Commands\Test::class
];


protected function schedule(Schedule $schedule)
{
    $schedule->command('activity:update')
             ->everyMinute();
}<br>

Я уже прочитал несколько упомянутых статей, в которых нужно добавить команду расписания (* * * * * /usr/bin/php /var/www/html/Projectname/artisan schedule:run >> /dev/null 2>&1), работающую в crontab,

Когда я запускаю crontab -e
Я получил:

no crontab for ec2-user - using an empty one
~
~
~
~
~
~
~
~
~
"/tmp/crontab.p7jciw" 0L, 0C

Итак, я нашел другой способ открыть crontab, используя: sudo vi /etc/crontab
Я получил этот экран:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed

~                                                                               
~                                                                               
~                                                                               
~                                                                               
~                                                                               
~                                                                               


и когда я поставил эту строку (* * * * * /usr/bin/php /var/www/html/Projectname/artisan schedule:run >> /dev/null 2>&1) (копировать / вставить) и попытался ее сохранить, я не смог ее сохранить из-за разрешения имени пользователя

Во-первых, нужно ли встраивать его в crontab, чтобы команда работала каждые минуты? и где недостающая часть в моем коде, которая не запускает auto everyMinute?

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

1 Ответ

1 голос
/ 18 октября 2019

Если вы запустите его вручную, он будет запущен только один раз. Когда вы помещаете команду на вкладку cron, cronjob будет запускаться каждую минуту, и поэтому ваша электронная команда будет запускаться каждую минуту.

То, что делает cron, запускается schedule:run каждую минуту, то же самое вы делаетевручную.

Поэтому добавьте строку в ваш crontab, и вы будете получать письма каждую минуту

...