1 Star 0 Fork 139

dou dou / EasyTask

forked from GaoJiuFeng / EasyTask 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
README.md 6.70 KB
一键复制 编辑 原始数据 按行查看 历史
GaoJiuFeng 提交于 2020-03-30 22:03 . 优化

EasyTask原生常驻内存定时任务

项目介绍

       EasyTask是基于Psr4构建的原生常驻内存定时任务定时器Composer包,同时支持windows、linux、mac环境运行。

       QQ群60973229(讨论交流,问题反馈)

运行环境

  • windows:PHP>=5.5 (依赖com_dotnet+Wpc扩展,Wpc扩展一键安装包;)
  • linux|mac:PHP>=5.5 (依赖pcntl+posix扩展,一般默认已装;)

Composer安装

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

【一】. 快速入门->创建任务
//初始化
$task = new Task();

// 设置常驻内存
$task->setDaemon(true);

// 设置项目名称
$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秒执行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();

【二】. 快速入门->连贯操作
$task = new Task();

// 设置常驻内存
$task->setDaemon(true)   

// 设置项目名称
->setPrefix('ThinkTask')   

// 设置系统时区
->setTimeZone('Asia/Shanghai')  

// 设置子进程挂掉自动重启
->setAutoRecover(true)  

// 设置PHP运行路径,一般Window系统才需要设置,当系统无法找到才需要您手动设置
->setPhpPath('C:/phpEnv/php/php-7.0/php.exe')

/**
 * 设置记录运行时目录(日志或缓存目录)
 * 不设置的话Linux默认/tmp/目录
 * 不设置的话Window默认C:\Windows\Temp目录
 */
->setRunTimePath('./Application/Runtime/')

/**
 * 关闭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();

【三】. 快速入门->命令整合
// 获取命令
$command = empty($_SERVER['argv']['1']) ? '' : $_SERVER['argv']['1'];

// 配置任务
$task = new Task();
$task->setDaemon(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();
}
else
{
    exit('Command is not exists');
}

启动: php this.php start
查询: php this.php status
关闭: php this.php stop

【四】. 快速入门->认识输出信息
┌─────┬──────────────┬─────────────────────┬───────┬────────┬──────┐
│ pid │ name         │ started             │ timer │ 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:定时任务启动时间
timer:定时任务执行间隔时间
status:定时任务状态
ppid:管理当前定时任务的守护进程id

【五】. 进阶了解->windows开发规范
-> 强烈建议您使用绝对路径规范开发
-> 启动异常请尝试用同步方式启动或者查看系统日志定位问题
-> Windows命令行不支持PHP中文编码可参考文章https://www.gaojiufeng.cn/?id=270的第二种方式修改即可支持utf8国际编码

【六】. 进阶了解->框架集成

  -> thinkphp3.2.x已支持.

  -> thinkPhp5.x.x已支持.

  -> laravelPhp6.x.x已支持.

【七】. 进阶了解->推荐操作
-> 推荐使用7.1以上版本的PHP,支持异步信号,不依赖ticks
-> 推荐安装php_event扩展基于事件轮询的毫秒级定时支持

【八】. 感谢phpStorm为开源作者提供免费授权码

PHP
1
https://gitee.com/topasp/EasyTask.git
git@gitee.com:topasp/EasyTask.git
topasp
EasyTask
EasyTask
master

搜索帮助