- 包名 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】。
建议使用进程守护。