当前位置:首页 > PHP > 正文内容

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

高老师6年前 (2020-05-20)PHP1804

        本教程使用的定时任务基于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://blog.20230611.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://blog.20230611.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://blog.20230611.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格式的指令,可以了解官网文档尝试。不懂可以进群讨论。

扫描二维码推送至手机访问。

版权声明:本文由高久峰个人博客发布,如需转载请注明出处。

本文链接:https://blog.20230611.cn/post/138.html

分享给朋友:

“php定时任务,php定时器,php定时器,php定时任务管理,php定时任务框架,php实现定时任务,php定时任务系统” 的相关文章

php经纬度计算距离

php经纬度计算距离

/**  * 计算两点地理坐标之间的距离  * @param  Decimal $longitude1 起点经度  * @param  Decimal $lati...

php 地址转换经纬度

php 地址转换经纬度

//$ak开发密钥,$cityname城市名称(支持省县乡详细地址) public  function   getposition($ak,$cityname){ $callback=array('lng'=>0,'l...

php多进程实现任务管理器,定时执行任务,支持守护

php多进程实现任务管理器,定时执行任务,支持守护

主要原理是通过PHP创建多个子进程,在子进程中发送进程闹钟信号,然后再监听闹钟信号中继续发送闹钟信号。同时通过父进程设置非阻塞运行。代码如下:<?php /**  * 订单任务  */ class Order {    &n...

【一】PHP多进程学习-简单创建父子进程.理解父子进程运行流程

【一】PHP多进程学习-简单创建父子进程.理解父子进程运行流程

(1).学习的目标:学会创建父子进程,并且能够区分当前进程是父还是子;了解父进程执行过程,子进程执行过程;能够用多进程执行任务(2).相关函数学习:    (2.1)pcntl_fork()执行时:       &nbs...

php finally使用

php finally使用

<?php /**  * @throws Exception  */ function curl() {     throw  new \Exception('err...

php限制方法返回值类型

php限制方法返回值类型

php7新增的特性(1).强制限制只能返回一种类型<?php class task { } //must return an integer function add(): int {    &nb...