laravel编写后台回写脚本
不同与队列和任务调度(定时任务),这里我要实现近似实时的后台回写进程。
要求做到平滑重启,使其在完成某一次任务后自动退出进程,而不是暴力kill进程。
先配置好redis
创建一个command
php artisan make:command Read3SuccessStat
注册命令
在kernel.php中的$commands中添加 Read3SuccessStat::class
编辑命令
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Redis;
class Read3SuccessStat extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'Read3SuccessStat {--action=}';
/**
* The console command description.
*
* @var string
*/
protected $description = '排查成就是否达成';
private $key;
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
$this->key = 'signal:stop_Read3SuccessStat';
}
/**
* 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){
$this->info(date('Y-m-d H:i:s'));
sleep(2);
if(Redis::exists($this->key)){
Redis::del($this->key);
break;
}
}
$this->info('Read3SuccessStat stoped');
}
public function sendStopSignal(){
Redis::set($this->key, 1);
$this->info('the stop signal is sended to Read3SuccessStat');
}
}
打开两个命令行,进入项目根目录,分别执行以下命令
启动
php artisan Read3SuccessStat --action=run
停止
php artisan Read3SuccessStat --action=stop
关于进程重启
使用supervisor来管理 php artisan Read3SuccessStat --action=run 命令,可以做到自动重启,当你发送stop指令后,进程自动退出,然后supervisor会帮你唤起进程。
扫描二维码关注公众号,回复:
8510319 查看本文章
关于supervisor的使用,可参考其他文章。