# EasyTask **Repository Path**: lewisliang82/EasyTask ## Basic Information - **Project Name**: EasyTask - **Description**: PHP原生常驻内存定时任务,PHP定时任务,PHP定时器 - **Primary Language**: PHP - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 142 - **Created**: 2020-01-16 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 

EasyTask -- PHP原生常驻内存定时任务定时器

(QQ交流群60973229)

=============== > 运行环境:windows | linux | macos ##

【一】 环境配置

##

【二】 Composer安装

~~~ composer require easy-task/easy-task ~~~ ~~~ "require": { "easy-task/easy-task": "*" } ~~~ ##

【三】 快速使用

3.1 创建多个定时任务
~~~ $task = new Task(); //设置常驻内存 $task->setDaemon(true); //设置关闭标准输入输出(定时任务中任何输入和打印全部关闭,不显示) $task->setCloseInOut(true); //设置记录日志,当日志存在异常类型抛出到外部 $task->setWriteLog(true, true); //1.添加闭包函数类型定时任务(开启2个进程,每隔10秒执行1次) $task->addFunc(function () { $url = 'https://www.gaojiufeng.cn/?id=243'; @file_get_contents($url); }, 'request', 10, 2); //2.添加类的方法类型定时任务(同时支持静态方法)(开启1个进程,每隔20秒执行1次) $task->addClass(Sms::class, 'send', 'sendsms', 20, 1); //3.添加指令类型的定时任务(开启1个进程,每隔10秒执行1次) $command = 'php /www/web/orderAutoCancel.php'; $task->addCommand($command,'orderCancel',10,1); //启动任务 $task->start(); ~~~
3.2 使用连贯操作
~~~ $task = new Task(); $task->setDaemon(true) ->setCloseInOut(true) ->setPrefix('ThinkTask') ->addClass(Sms::class, 'send', 'sendsms1', 20, 1) ->addClass(Sms::class, 'recv', 'sendsms2', 20, 1) ->addFunc(function () { echo 'Success3' . PHP_EOL; }, 'fucn', 20, 1) ->start(); ~~~
3.3 整合启动任务、查看状态、关闭任务(仅供参考)
~~~ //获取命令行输入参数 $cliArgv = $_SERVER['argv']; $command = empty($cliArgv['1']) ? '' : $cliArgv['1']; //获取输入的是start,status,stop中的哪一个 $isForce = !empty($cliArgv['2']) && $cliArgv['2'] == '-f' ? true : false; //获取是否要强制停止 //配置定时任务 $task = new Task(); $task->setDaemon(true) ->setCloseInOut(true) ->setWriteLog(true, true) ->addFunc(function () { $url = 'https://www.gaojiufeng.cn/?id=271'; @file_get_contents($url); }, 'request', 10, 2);; //根据命令执行 if ($command == 'start') { $task->start(); } elseif ($command == 'status') { $task->status(); } elseif ($command == 'stop') { $task->stop($isForce); } else { exit('This is command is not exists:' . $command . PHP_EOL); } 启动命令: php this.php start 查询命令: php this.php status 关闭命令: php this.php stop 强制关闭命令: php this.php stop -f ~~~
3.4 认识启动后表格输出信息
~~~ ┌─────┬──────────────┬─────────────────────┬───────┬────────┬──────┐ │ pid │ task_name │ started │ timer │ status │ ppid │ ├─────┼──────────────┼─────────────────────┼───────┼────────┼──────┤ │ 32 │ Task_request │ 2020-01-10 15:55:44 │ 10s │ active │ 31 │ │ 33 │ Task_request │ 2020-01-10 15:55:44 │ 10s │ active │ 31 │ └─────┴──────────────┴─────────────────────┴───────┴────────┴──────┘ 参数说明: pid:当前定时任务的进程id task_name:您为您的定时任务起的别名 started:定时任务启动时间 timer:定时任务执行间隔时间 status:定时任务状态 ppid:管理当前定时任务的守护进程id ~~~
3.5 手工Linux命令管理
~~~ 查询全部任务:ps aux | grep Task (其中Task可以使用setPrefix方法修改默认名称) 关闭单个任务:kill pid (例如上面的第一个任务进行id是32,执行kill 32) 关闭全部任务:kill ppid (例如上面的ppid是31,执行kill 31) 提示:请不要直接kill -9 ppid,否则其他子进程成为孤儿进程 ~~~
3.6 Windows特别说明
~~~ windows支持的函数:setPrefix(),addCommand(),start(), windows必须使用cmd管理员权限执行 windows不可保证稳定性,排查跟踪困难 ~~~