开发者社区> 高久峰> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

php定时任务,php定时器,php定时器,php定时任务管理,php定时任务框架,php实现定时任务,php定时任务系统

简介: php定时任务,php定时器,php定时器,php定时任务管理,php定时任务框架,php实现定时任务,php定时任务系统
+关注继续查看

本教程使用的定时任务基于EasyTak实现,EasyTask官方参考文档https://gitee.com/392223903/EasyTask

首先我们必须明白PHP的定时器只能基于CLI命令行形式运行,由于FPM形式用完即走,内存立即释放,无法做到常驻,当然我们也可以让FPM常驻起来,但是内存开销过大。因此FPM本身就是官方用来提供给我们做网站CURD的,而CLI模式才是后端核心,大量的PHP服务都是基于PHP_CLI模式,因此高级程序员更必须了解CLI模式。但凡大点的公司都是用FPM处理网页,CLI处理服务队列。下面的定时任务也是基于CLI执行。

我们使用的定时任务包是EasyTask,先安装它(需要安装的扩展请看它的官方文档,切记没有必要安装event扩展):

composer require easy-task/easy-task

我们创建一个console.php简单使用它:

// 加载Composer代码

require './vendor/autoload.php';

//初始化

$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, 1);

// 启动任务

$task->start();

我们执行这个脚本:

php console.php start

如果是windows系统,我们看到启动了2个cmd窗口,1个窗口是守护进程,1个是执行上面的每隔10s访问网站的定时任务的进程,测试成功。

那么我们如果不显示cmd执行呢,只需要修改为常驻运行:

// 设置常驻内存

$task->setDaemon(true);

那我们如何添加多个定时任务呢?只需要多调用addFunc方法添加任务进去即可,下面再添加1个15秒的定时任务

 $task->addFunc(function () {

    $url = 'https://www.gaojiufeng.cn/?id=2432';

    @file_get_contents($url);

}, 'request2', 15, 1);

上面只是说添加任务,那么如何去管理呢?官方给了一个基础的命令整合命令:

// 获取命令

$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

当然你可可以在任务管理中找到所有进程进行关闭。事实上EasyTask还支持addClass方式添加定时器去执行类的方法,也支持addCommand方法添加定时器去执行cmd或者shell命令,也支持crontab格式的指令,可以了解官网文档尝试。不懂可以进群讨论。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
在Mac系统下配置PHP运行环境
在Mac系统下配置PHP运行环境
0 0
这是我见过PHP里最好用的开源免费进销存/ERP系统(付源码)
基于thinkphp+layui开发。功能包含:采购、销售、零售、多仓库管理、财务管理等功能 和超详细的报表功能(采购报表、销售报表、零售报表、仓库报表、资金报表等)
0 0
【PHP秒杀系统】第五篇 优化秒杀的步骤
【PHP秒杀系统】第五篇 优化秒杀的步骤
0 0
【PHP秒杀系统】第四篇 秒杀的逻辑开发
【PHP秒杀系统】第四篇 秒杀的逻辑开发
0 0
【PHP秒杀系统】第三篇(续) 细说类文件的自动加载器
【PHP秒杀系统】第三篇(续) 细说类文件的自动加载器
0 0
【PHP秒杀系统】第三篇 商品页面服务端代码开发
【PHP秒杀系统】第三篇 商品页面服务端代码开发
0 0
【PHP秒杀系统】 第二篇 系统设计
【PHP秒杀系统】 第二篇 系统设计
0 0
【PHP秒杀系统】第一篇 环境准备即MySQL的封装
【PHP秒杀系统】第一篇 环境准备即MySQL的封装
0 0
ubuntu系统下安装php环境
ubuntu系统下安装php环境
0 0
+关注
高久峰
开源中国GVP
文章
问答
文章排行榜
最热
最新
相关电子书
更多
PHP安全开发_从白帽角度做安全
立即下载
复杂PHP系统性能瓶颈排查及优化
立即下载
复杂PHP系统性能瓶颈排查及优化
立即下载