本文共 1500 字,大约阅读时间需要 5 分钟。
laravel编写后台回写脚本
不同与队列和任务调度(定时任务),这里我要实现近似实时的后台回写进程。
要求做到平滑重启,使其在完成某一次任务后自动退出进程,而不是暴力kill进程。
先配置好redis
创建一个command
php artisan make:command Read3SuccessStat注册命令
在kernel.php中的$commands中添加 Read3SuccessStat::class编辑命令
key = 'signal:stop_Read3SuccessStat'; $this->startTime = time(); } /** * Execute the console command. * * @return mixed */ public function handle() { $action = $this->option('action'); if($action == 'run'){ $this->doStat(); }elseif ($action == 'stop'){ $this->sendStopSignal(); } } public function doStat(){ while(true){ if ($this->checkIfNeedExit()) { break; } $this->info(date('Y-m-d H:i:s')); sleep(2); } $this->info('Read3SuccessStat stoped'); } public function sendStopSignal(){ Redis::set($this->key, 1); $this->info('the stop signal is sended to Read3SuccessStat'); } public function checkIfNeedExit() { $signal = Redis::get($this->key); if (!empty($signal) && $signal > $this->startTime) { return true; } return false; }}
打开两个命令行,进入项目根目录,分别执行以下命令
启动
php artisan Read3SuccessStat --action=run停止
php artisan Read3SuccessStat --action=stop关于进程重启
使用supervisor来管理 php artisan Read3SuccessStat --action=run 命令,可以做到自动重启,当你发送stop指令后,进程自动退出,然后supervisor会帮你唤起进程。关于supervisor的使用,可参考其他文章。
转载地址:http://bzaui.baihongyu.com/