laravel编写后台回写脚本

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的使用,可参考其他文章。

发布了412 篇原创文章 · 获赞 25 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/raoxiaoya/article/details/103618719