# 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
## 【一】 环境配置
- windows:PHP>=5.4
- linux|mac:PHP>=5.4(依赖pcntl和posix扩展,一般默认已安装,推荐PHP7.1以上,支持异步信号,不依赖ticks)
## 【二】 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不可保证稳定性,排查跟踪困难
~~~