任务处理

  • 包名 cli_tasks

至少存在一台主服务,用于分发任务到每台具体处理任务的机器上。

注册主服务器

php cli.php reg_main

注册处理任务的服务器

php cli.php reg_branch

使用

  • 主机分发任务
php cli.php issue
  • 处理任务
php cli.php task
  • 添加任务
php cli.php task_add --title=演示  --cmd=task_demo

其中task_demo 需要在命令行中存在,如果有参数请加 --par=

php cli.php task_add --title=test --cmd=demo --par=InNzc3Mi

par参数是由

$str = 'demo';//可以是数组或字符串
base64_encode(json_encode($str));

测试

php cli.php demo --par=InNzc3Mi
  • 心跳
php cli.php heartbeat

php.ini

删除禁用函数 shell_exec

写任务

任务目录 task

命名规则 task_开头,但不能为task_add.php

例如 task_dowonload.php

<?php  
namespace task; 
use third_party\mac;
class task_dowonload extends \cli
{ 
    protected string $description = "本地测试 --url=参数 "; 
    //最多同时运行进程数
    public $max_run = 2;
    
    protected array $options = [
        'url' => '', 
    ];

    public function run() : void
    {  
        parent::run();  
        $url = $this->arg['url];
        $this->write("---",'bright_red');
        $this->write("par值>>> ".$par,'green'); 
        $this->write("a",'blue'); 
        $this->write("a",'red'); 
        sleep(10); 
        
    }
}

则有命令 php cli.php task_dowonload --url=

run()

$this->arg[]  // 数组取参数
$this->par //为 --par=的值【base64_encode(json_encode($str)) 】

理解任务处理流程

当有多个任务时通过一台机器不能很好的处理时,此时需要多台机器处理。

1.注册服务,注册一台主机其余的均为任务处理机器。注册主机【reg_main】,注册任务机【reg_branch】。 当需要切换主机时,先将主机注册成任务机,然后再用一台机器注册为主机即可。

2.由主机进行任务的分发工作【issue】。

3.任务机器需要做两件事情,一是心跳【heartbeat】,告知主机我在线;二是处理任务【task】。

4 添加任务【task_add –title=演示 –cmd=task_demo】。

建议使用进程守护。