Laravel CRON只能手动执行命令,不会每隔一分钟触发一次命令

时间:2019-10-18 08:14:20

标签: laravel cron scheduled-tasks cron-task

我已经在AWS Ubuntu中拥有laravel 5.4应用程序,在我的项目中,我有一个命令可以为用户发送电子邮件everyMinute。 如果运行命令php artisan activity:update可以正常工作, 并且如果我运行php artisan schedule:run,它也运行良好,并且用户仅收到了该电子邮件一次。

但是,我仍然不知道为什么命令中的everyMinute函数不起作用,并且我无法收到电子邮件everyMinute。
我的核心:

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


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

我已经阅读了一些提到的文章,这些文章需要添加在crontab中运行的schedule命令(* * * * * /usr/bin/php /var/www/html/Projectname/artisan schedule:run >> /dev/null 2>&1),

我运行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中以使命令在everyMinute中起作用?而我的代码中缺少哪些部分,使其无法自动触发everyMinute?

第二:如何使我的命令运行在everyMinute上,而该命令仍在手动运行,只是自动化部分无法运行。

1 个答案:

答案 0 :(得分:1)

如果您手动运行它,它将仅运行一次。将命令放在cron选项卡中时,cronjob将每分钟运行一次,因此,电子邮件命令将每分钟触发一次。

cron的操作每分钟运行schedule:run,与您手动执行的操作相同。

因此,将该行添加到您的crontab中,您将每分钟收到一封电子邮件