国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

請教大佬們,crontab動態(tài)操作方法

a361690548

問題描述

請教大佬們,crontab動態(tài)操作更好的方法
我現(xiàn)在是基于Timer實現(xiàn)的,不知道各位有啥好的方法推薦

下面是我的代碼

<?php
namespace app\process;
use app\admin\logic\system\SystemCrontabLogic;
use Workerman\Crontab\Crontab;
use Workerman\Timer;

class Task
{
    protected $crontab=[];
    public function onWorkerStart($worker)
    {
        $this->init();
        $this->heartBeat();
    }
    public function init()
    {
        $logic = new SystemCrontabLogic();
        $taskList = $logic->where('status', 1)->select();
        $allTaskKeys =[];
        foreach ($taskList as $task){
            if(!isset($this->crontab[$task->id])){
                $crontab = new Crontab($task->rule, function () use ($logic, $task) {
                    $logic->run($task->id);
                },$task->name);
                $this->crontab[$task->id] = $crontab;
            }
            $allTaskKeys[$task->id] = $task->id;
        }
        $tasks = array_keys($allTaskKeys);
        foreach ($this->crontab as $key=>$task) {
            if (!in_array($key, $tasks)) { //已經(jīng)從數(shù)據(jù)庫刪除
                $crontab = $this->crontab[$key];
                $crontab->remove($task->getId());
                unset($this->crontab[$key]);
            }
        }
    }
    public function run($args)
    {
        $list = Crontab::getAll();
        foreach ($list as $item){
            var_dump('任務(wù)ID=>'.$item->getId().'任務(wù)名稱=>'.$item->getName());
        }
        echo '任務(wù)調(diào)用:'.date('Y-m-d H:i:s')."\n";
        //        var_dump('參數(shù):'. $args);
    }
    private function heartBeat()
    {
        Timer::add(60, function () {
            echo '心跳檢測:'.date('Y-m-d H:i:s')."\n";
            $this->init();
        });
    }
}
696 4 0
4個回答

tanhongbin

定時器 定時查表 然后把新的 或者未執(zhí)行的 重新執(zhí)行唄 但是crontab 不知道怎么刪除

  • tanhongbin 2025-01-06

    或者定時查表 有變化 重啟crontab這個進程也是可以的

  • a361690548 2025-01-06

    我現(xiàn)在就是基于定時器弄得

不敗少龍

看看有沒有參考價值(Controller里面寫的)

                //查詢表中cron
                $info = $this->model->where('id',$id)->select(['id',"cron",'product_ids'])->first();
                $task_id = $info->id;
                $old_cron = $info->cron;
                //新的cron與舊cron比較
                if (empty($cron) || $cron == $old_cron){
                    $cron = $old_cron;
                }
                if($cron != $old_cron){
                    $cron_data_task = new Crontab($old_cron,function ()use(&$cron_data_task){
                        $cron_data_task->destroy();
                    });
                }
                $product_ids = $info->product_ids;
                $cron_data = new Crontab($cron, function () use (&$cron_data,$product_ids, $task_id,$status,$cron) {
                    $new_cron = IotThingsEventSource::query()->where('id',$task_id)->value('cron');
                    $old_cron = $cron_data->getRule();
                    if ($status==0 || $online_status==0 || $new_cron!=$old_cron){
                        $cron_data->destroy();
                    }else{
                        //執(zhí)行業(yè)務(wù)邏輯
                    }
                });
小Z先生

直接把這個項目拉下來看 http://m.wtbis.cn/plugin/42
看懂了你就懂了

  • a361690548 2025-01-08

    之前大概看過,明天我在細看一遍

  • tanhongbin 2025-01-09

    crontab這個 能不能刪除呢 如果能 其實很好實現(xiàn)

我是老6

刪除只能靠gc了,如果類沒有引用會被回收掉吧,如果說暫停定時器是可以實現(xiàn)的,在類屬性中指定屬性,去判斷屬性就好了,像下面這種
截圖

  • tanhongbin 2025-01-13

    有刪除crontab的方法 new crontab得到的對象 調(diào)用這個方法 destroy() 就可以刪除了,但是下一分鐘生效

  • 我是老6 2025-01-16

    結(jié)合上圖圈出來的區(qū)域, 給某一個crontab 實例 指定一個停止屬性就可以了,self::$taskPools[$id]->stop = true;這樣就可以實現(xiàn)暫停、啟動的功能了.如果有停止屬性就不往下執(zhí)行就可以了

??