php怎么定时任务管理,cron-manager

cronManager是一个基于PHP实现的简单定时任务管理工具,它采用多进程模型和消息队列进行进程通信。支持守护进程、平滑重启、任务监控以及任务分片。使用命令行工具可以轻松检查、启动、监控任务状态。示例代码展示了如何配置和运行不同间隔的定时任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

cronManager

简介

cronManager是一个纯PHP实现的定时任务管理工具,api简单清晰,采用的是多进程模型,进程通信采用的是消息队列,任务监控也提供了简单的命令,方便易用

特性

多进程模型

支持守护进程

平滑重启

提供各种命令监控任务运行状态

支持任务分片,也就是多个进程分割运行一个任务

环境要求

liunx

pcntl扩展开启

php 5.4以上

composer

手动安装记得要先 composer update一下哦!

使用介绍

核心方法 CronManager::taskInterval($name, $command, $callable, $ticks = [])

参数1 $name 定时任务名称

参数2 $command

传入string则表示用key@value的形式表示

s@n 表示每n秒运行一次

i@n 表示每n分钟运行一次

h@n 表示每n小时运行一次

at@nn:nn 表示指定每天的nn:nn执行 例如每天凌晨 at@00:00

传入array则表示依次运行数组里的每一个指定日期,要求每一个元素都可以被strtotime函数解析,否则运行不了

如: ['2017-09-09 08:00','2017-09-09 08:00']

参数3 $callable 回调函数,也就是定时任务业务逻辑

参数4 $ticks 用于任务分片

快速入门示例

//test.php

require __DIR__ . '/../vendor/autoload.php';

$manager = new SuperCronManager\CronManager();

// 设置worker数

$manager->workerNum = 5;

// 设置输出重定向,守护进程模式才生效

$manager->output = './test.log';

$manager->taskInterval('每秒钟运行一次', 's@1', function(){

echo "Hello crontabManager\n";

});

$manager->taskInterval('每分钟运行一次', 'i@1', function(){

echo "Hello crontabManager\n";

});

$manager->taskInterval('每小时运行一次', 'h@1', function(){

echo "Hello crontabManager\n";

});

$manager->taskInterval('每天凌晨运行一次', 'at@00:00', function(){

echo "Hello crontabManager\n";

});

$manager->taskInterval('任务分片', 's@1', function($str){

echo "$str\n";

},[1,2]);

$manager->taskInterval('分片测试', ['2017-12-20 23:28','2017-12-20 23:30'], function($index){

echo "ticks$index\n";

});

$manager->run();

命令使用示例

检测扩展是否启动,缺少扩展将无法使用。 建议第一次运行先使用此命令查看扩展情况

php test.php check

+----------+--------+------+------+

| name | status | desc | help |

+----------+--------+------+------+

| php>=5.4 | [OK] | | |

| pcntl | [OK] | | |

| posix | [OK] | | |

| sysvmsg | [OK] | | |

| sysvsem | [OK] | | |

| sysvshm | [OK] | | |

+----------+--------+------+------+

启动

php test.php

+------------+---------------------+

| pid | 19629 |

+------------+---------------------+

| output | /dev/null |

+------------+---------------------+

| task_num | 7 |

+------------+---------------------+

| worker_num | 5 |

+------------+---------------------+

| start_time | 2017-12-09 13:59:15 |

+------------+---------------------+

以守护进程方式启动(无任何提示表示成功)

php test.php -d

查看任务状态

php test.php status

+------------+---------------------+

| pid |19690 |

+------------+---------------------+

| output | ./test.log |

+------------+---------------------+

| task_num | 4 |

+------------+---------------------+

| worker_num | 5 |

+------------+---------------------+

| start_time | 2017-12-09 14:03:44 |

+------------+---------------------+

+----+------------------+------------------+--------+-------+---------------------+---------------------+

| id | name | tag | status | count | last_time | next_time |

+----+------------------+------------------+--------+-------+---------------------+---------------------+

| 0 | 每秒钟运行一次 | s@1 | 正常 | 3 | 2017-12-20 23:26:42 | 2017-12-20 23:26:43 |

| 1 | 每分钟运行一次 | i@1 | 正常 | 0 | - | 2017-12-20 23:27:39 |

| 2 | 每小时运行一次 | h@1 | 正常 | 0 | - | 2017-12-21 00:26:39 |

| 3 | 每天凌晨运行一次 | at@00:00 | 正常 | 0 | - | 2017-12-21 00:00:00 |

| 4 | 任务分片 | s@1 | 正常 | 3 | 2017-12-20 23:26:42 | 2017-12-20 23:26:43 |

| 5 | 任务分片 | s@1 | 正常 | 3 | 2017-12-20 23:26:42 | 2017-12-20 23:26:43 |

| 6 | 分片测试 | 2017-12-20 23:28 | 正常 | 0 | - | 2017-12-20 23:28:00 |

+----+------------------+------------------+--------+-------+---------------------+---------------------+

查看worker状态

php test.php worker

+------------+---------------------+

| pid | 19690 |

+------------+---------------------+

| output | ./test.log |

+------------+---------------------+

| task_num | 4 |

+------------+---------------------+

| worker_num | 5 |

+------------+---------------------+

| start_time | 2017-12-09 14:03:44 |

+------------+---------------------+

+-------+------------+----------+---------------------+

| pid | exec_count | memory | start_time |

+-------+------------+----------+---------------------+

| 19691 | 16 | 0.57(mb) | 2017-12-09 14:03:44 |

| 19692 | 19 | 0.57(mb) | 2017-12-09 14:03:44 |

| 19693 | 12 | 0.57(mb) | 2017-12-09 14:03:44 |

| 19694 | 12 | 0.57(mb) | 2017-12-09 14:03:44 |

| 19695 | 5 | 0.57(mb) | 2017-12-09 14:03:44 |

+-------+------------+----------+---------------------+

查看服务日志(这个有点LOW,就是直接读日志文件输出)

php test.php log

2017-12-09 14:03:44 PID:19690 [debug] master启动

为什么使用PHP管理crontab 一般在定时任务较少的情况下,使用原生的crontab服务一般不会有什么问题,但当定时任务较多时就会产生如下问题: 文本形式的定时任务可读性很差,在没有任何注释的情况下,新人很难在不读源码的情况下了解定时任务的业务逻辑 在分布式的场景中,定时任务会散落到多台机器上,无法统一管理 定时任务的日志不能集中化管理,对定时任务的运行分析及故障排除比较麻烦 基于以上几点原因,我们迫切的需要一个可以集中化管理的、可配置的定时任务管理器 但自己开发一套分布式的定时任务系统何其复杂,所以作者采用crontab服务做辅助,使用php实现对定时任务的配置管理 使用php管理定时任务有哪些优势 定时任务可以不再是以文本方式的形式存在,可以存储在缓冲、数据库中,甚至你可以开发管理功能,在后台对定时任务进行编辑 定时任务的日志是可配置的,你可以按照业务需求,对日志进行差异化配置 使用方式如下: 编写一个任务管理器,可参考test/simple.php 将上述脚本添加到crontab中,一分钟执行一次 示例: <?php $crontab_config = [  'test_1' => [  'name' => '服务监控1',  'cmd' => 'php -v',  'output' => '/tmp/test.log',  'time' => '* * * * *'  ],  'single_test' => [  'name' => 'php -i',  'cmd' => 'php -i',  'output' => '/tmp/single_script.log',  'time' => [  '* * * * *',  '* * * * *',  ],  ], ];  $crontab_server = new \Jenner\Zebra\Crontab\Crontab($crontab_config); $crontab_server->start(); 工具短小,但很精悍 在分布式场景中,你可以把定时任务写入数据库中进行统一管理,你可以设定哪些定时任务是由哪些机器执行, 然后通过生成文本文件的方式发送到所有机器上,再由这些机器上的phpCrontab读取处理;从而实现分布式场景下的定时任务统一管理。 标签:Zebra
taskPHP taskPHP基于php开发的定时计划任务框架,利用多进程实现任务的分配和运行,利用内存共享实现进程间通信,支持多线程模式需要安装pthreads扩展(可选),支持linux和windows。有较好的伸缩性、扩展性、健壮稳定性而被多家公司使用,同时也希望开源爱好者一起贡献。   框架概况 框架目录结构: taskPHP 根目录 |-- core 框架系统目录 | |-- lib 框架核心文件目录 | | |-- .... 众多的框架核心类库文件 | |-- guide.php 框架引导文件 | |-- distribute_listen.php 任务派发进程入口 | |-- worker_listen.php 任务执行进程入口 |-- docs 开发文档存放目录 |-- logs 日志目录 |-- tasks 用户任务目录 | |-- demo demo任务 | | |-- Lib demo任务的扩展目录 | | |-- demoTask.php demo任务类文件 | | |-- config.php demo任务配置文件 | | ... 更多任务 | |-- config.php 全局配置文件 |-- main.php 框架入口文件 |-- windows_single.cmd windows快速启动文件 框架说明 linux下子进程执行任务,修改脚本无需重启后台服务立即生效,windows下修改任务脚本后需重启后台脚本 但往系统添加执行不受影响。 框架支持多线程模式,需要安装pthreads扩展(可选)。 使用内存共享实现进程通信,堵塞式消息队列,整个框架的运行无需第三方扩展。 任务派发及具体任务执行不在同个进程[distribute_listen.php]和[worker_listen.php],windows和linux下启用入口文件[main.php],windows下可运行[windows_single.cmd]快速启动。 执行时间语法跟crontab类似,且支持秒设置。 添加任务简单,只需继承Task基类,实现任务入口run方法。 环境要求 php版本>= 5.5 开启shmop 注意事项 由于任务存在派发时间,所以任务运行的时间可能会有1-2秒的误差。 windows下执行任务在循环里,编写任务有问题或调用exit将导致后台脚本停止,linux下无此问题。 建议生产部署在linux下运行多进程模式,因为运行在多线程模式运行一段时间后报错,pthreads has detected that the core\lib\Pthread could not be started, the system lacks the necessary resources or the system-imposed limit would be exceeded in xxx 文档列表 -->数据库类使用教程 支持(Mysql,Mongo,Oracle,Pgsql,Sqlsrv,Sqllite) -->windows下安装php多线程扩展pthreads教程 -->工具类Utils使用说明 -->http请求客户端类Client使用说明 使用说明 时间配置格式说明: * * * * * * * //格式 :秒 分 时 天 月 年 周 10 * * * * * * //表示每一分钟的第10秒运行 /10 * * * * * * //表示每10秒运行 /1 * 15,16 * * * * //表示 每天的15点,16点的每一秒运行 系统命令说明: main.php [start] 启动 可不带参数 main.php close 结束 main.php reload 重新加载任务 main.php delete demo 删除任务 main.php select 查看任务列表 main.php exec demo 运行任务 主要用于任务开发中调试单个任务 全局配置文件规范 标签:taskphp  计划任务
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值