laravel编写后台回写脚本

50 篇文章 2 订阅

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;
    private $startTime;

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
        $this->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的使用,可参考其他文章。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值