项目介绍
PHP常驻内存的多进程任务管理器Composer包。以进程管理为出发点,同时也支持为每个进程设置定时执行功能,您可以用它来完成需要重复运行的任务(如订单超时自动取消,短信邮件异步推送,队列/消费者/频道订阅者等等),甚至处理计划任务。内置任务异常上报功能,异常错误您都可以自定义处理(例如实现异常错误自动短信邮件通知);还支持任务异常退出自动重启功能,让您的任务运行更稳定 ,工具包同时支持windows、linux、mac环境运行。
运行环境
windows:PHP>=5.4 (依赖com_dotnet+wpc扩展)文档+安装教程
linux|mac:PHP>=5.4 (依赖pcntl+posix扩展)文档+安装教程
Composer安装
composer require easy-task/easy-task
【A】. 快速入门->创建任务
//初始化
$task = new Task();
//设置非常驻内存
$task->setDaemon(false);
//设置项目名称
$task->setPrefix('EasyTask');
//设置记录运行时目录(日志或缓存目录)
$task->setRunTimePath('./Application/Runtime/');
// 1.添加闭包函数类型定时任务(开启2个进程,每隔10秒执行1次你写闭包方法中的代码)
$task->addFunc(function () {
$url = 'https://www.gaojiufeng.cn/?id=243';
@file_get_contents($url);
}, 'request', 10, 2);
// 2.添加类的方法类型定时任务(同时支持静态方法)(开启1个进程,每隔20秒执行一次你设置的类的方法)
$task->addClass(Sms::class, 'send', 'sendsms', 20, 1);
// 3.添加指令类型的定时任务(开启1个进程,每隔10秒执行1次)
$command = 'php /www/web/orderAutoCancel.php';
$task->addCommand($command,'orderCancel',10,1);
// 4.添加闭包函数任务,不需要定时器,立即执行(开启1个进程)
$task->addFunc(function () {
while(true)
{
//todo
}
}, 'request', 0, 1);
//启动任务
$task->start();
【B】. 快速入门->连贯操作
//初始化
$task = new Task();
//设置常驻内存
$task->setDaemon(true)
//设置项目名称
->setPrefix('ThinkTask')
//设置系统时区
->setTimeZone('Asia/Shanghai')
//设置子进程挂掉自动重启
->setAutoRecover(true)
//设置PHP运行路径,一般Window系统才需要设置,当系统无法找到才需要您手动设置
->setPhpPath('C:/phpEnv/php/php-7.0/php.exe')
/**
*设置运行时目录(日志或缓存目录)
*/
->setRunTimePath('./Application/Runtime/')
/**
*设置关闭标准输出的STD文件记录
*/
->setCloseStdOutLog(true);
/**
*关闭EasyTask的异常注册
* EasyTask将不再监听set_error_handler/set_exception_handler/register_shutdown_function事件
*/
->setCloseErrorRegister(true)
/**
*设置接收运行中的错误或者异常(方式1)
*您可以自定义处理异常信息,例如将它们发送到您的邮件中,短信中,作为预警处理
* (不推荐的写法,除非您的代码健壮)
*/
->setErrorRegisterNotify(function ($ex) {
//获取错误信息|错误行|错误文件
$message = $ex->getMessage();
$file = $ex->getFile();
$line = $ex->getLine();
})
/**
*设置接收运行中的错误或者异常的Http地址(方式2)
* Easy_Task会POST通知这个url并传递以下参数:
* errStr:错误信息
* errFile:错误文件
* errLine:错误行
*您的Url收到POST请求可以编写代码发送邮件或短信通知您
* (推荐的写法)
*/
->setErrorRegisterNotify('https://www.gaojiufeng.cn/rev.php')
//添加任务定时执行闭包函数
->addFunc(function () {
echo 'Success3' . PHP_EOL;
}, 'fucn', 20, 1)
//添加任务定时执行类的方法
->addClass(Sms::class, 'send', 'sendsms1', 20, 1)
//添加任务定时执行命令
->addCommand('php /www/wwwroot/learn/curl.php','cmd',6,1)
//启动任务
->start();
【C】. 快速入门->命令整合
//获取命令
$force = empty($_SERVER['argv']['2']) ? '' : $_SERVER['argv']['2'];
$command = empty($_SERVER['argv']['1']) ? '' : $_SERVER['argv']['1'];
//配置任务
$task = new Task();
$task->setRunTimePath('./Application/Runtime/');
$task->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')
{
$force = ($force == 'force'); //是否强制停止
$task->stop($force);
}
else
{
exit('Command is not exist');
}
启动任务: php console.php start
查询任务: php console.php status
普通关闭: php console.php stop
强制关闭: php console.php stop force
【D】. 快速入门->认识输出信息
┌─────┬──────────────┬─────────────────────┬───────┬────────┬──────┐
│ pid │ name │ started │ time │ status │ ppid │
├─────┼──────────────┼─────────────────────┼───────┼────────┼──────┤
│ 32 │ Task_request │ 2020-01-10 15:55:44 │ 10 │ active │ 31 │
│ 33 │ Task_request │ 2020-01-10 15:55:44 │ 10 │ active │ 31 │
└─────┴──────────────┴─────────────────────┴───────┴────────┴──────┘
参数:
pid:任务进程id
name:任务别名
started:任务启动时间
time:任务执行时间
status:任务状态
ppid:守护进程id
原文链接:https://gitee.com/392223903/EasyTask#--%E9%A1%B9%E7%9B%AE%E4%BB%8B%E7%BB%8D--1