Laravel定时任务schedule以及管理队列

时间:2024-02-25 13:00:32

接上一篇 >>lnmp1.4环境部署及laravel的安装<<

 

Laravel项目按成之后,需要定时启动任务,并且将一些耗时任务交给异步队列来处理,最大效率的利用服务器资源。

 

1. 首先需要开启调度

下面是你唯一需要添加到服务器的Cron条目:

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

该Cron将会每分钟调用Laravel命令调度,然后,Laravel评估你的调度任务并运行到期的任务。

2. 定义调度
你可以在App\Console\Kernel类的schedule方法中定义所有调度任务。比如:

protected function schedule(Schedule $schedule)
    {
        $schedule->call(function () {
            DB::table(\'recent_users\')->delete();
        })->daily(); 
    $schedule->command(\'emails:send --force\')->daily();
}

 

由于每个定时任务都会需要发邮件,而发邮件又是一个耗时任务,不可能一下子发完,就需要一个异步队列来处理。这里用supervisor来管理队列。

Supervisor是一个进程控制系统,由python编写,它提供了大量的功能来实现对进程的管理。

安装:

pip install supervisor
或者
agp-get install supervisor

配置文件:

[program:reminder]
process_name=%(program_name)s_%(process_num)02d
command=php /home/wwwroot/Reminder/artisan queue:work --sleep=3 --tries=3
autostart=true
autorestart=true
user=root
numprocs=1
redirect_stderr=true
stdout_logfile=/home/wwwlogs/reminder_worker.log

文件目录 

/etc/supervisor/conf.d/

supervisor命令:

$ supervisorctl status            //当前状态
$ supervisorctl stop app        //停止队列
$ supervisorctl start app:*        //启动队列
$ supervisorctl restart app:*        //重启
$ supervisorctl reread            //重新加载
$ supervisorctl update            //更新

每次修改项目都要重启队列使改动更新。