私信发送成功
Watch Star Fork

一个作词家 / CrontabWorkerPHP

纯php实现的高效简洁的定时任务管理工具,支持守护进程
克隆/下载
jlb 最后提交于 2017-11-17 17:51 update
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
2017-11-14 21:35
2017-11-17 17:18
2017-11-17 17:30
2017-11-17 13:17
2017-11-14 21:35
2017-11-17 17:51
2017-11-16 23:21
2017-11-17 13:19
2017-11-17 13:17
Loading...
README.md 2.35 KB

CrontabWorker

高效的php定时任务工具

环境要求

  1. Liunx
  2. pcntl扩展开启
  3. php 5.3以上
  4. composer

优点

时间粒度容易控制,代码简单

$test = new CrontabWorker();
// 重定向输出
$test->output = "/tmp/test.log";
//开启10个进程预备运行任务
$test->proccessNum = 10;
//指定每天11点00分运行
$test->addInterval('任务1', 'at@11:00', "\\Scripts\\Test::test");
//指定每秒运行一次
$test->addInterval('任务2', 's@1', "\\Scripts\\Test::test");
//指定每分钟运行一次
$test->addInterval('任务3', 'i@1', "\\Scripts\\Test::test");
//指定每小时运行一次
$test->addInterval('任务4', 'h@1', "\\Scripts\\Test::test");

$test->run();

基于多进程,多个任务同一时间都是并行,进程不够用时自动扩展进程

支持控制台命令控制服务状态

# 开始
php  worker.php start

# 以守护进程方式运行
php  worker.php start -d

# 停止
php  worker.php stop

# 重启
php  worker.php restart

# 查看任务运行信息
php  worker.php status

======================================================================
PPID: 6533
RUN_TIME: 2017-11-17 17:19
PROCCESS_TITLE: php-crontab
PROCCESS: 10
======================================================================
NAME           COMMAND   COUNT     LAST_TIME           NEXT_TIME      
任务1          at@11:00  0         none                11-18 11:00:00 
任务2          s@1       2         11-17 17:19:28      11-17 17:19:29 
任务3          i@1       0         none                11-17 17:20:26 
任务4          h@1       0         none                11-17 18:19:26 
======================================================================

压力测试

启用1000个任务,每个任务间隔为1秒,每个任务每秒执行10W至20W的循环

压测服务器配置:

2G 内存 1核心 CPU

cpu 低时30% 顶峰为60%

use \CrontabWorker\CrontabWorker;
$test = new CrontabWorker();
$test->output = "/tmp/test.log";
//开启10个进程预备运行任务
$test->proccessNum = 100;

for ($i=0; $i < 1000; $i++) { 
	//指定每秒运行一次
	$test->addInterval('性能测试', 's@1', "\\Scripts\\Test::test2");
}

$test->run();


<?php
namespace Scripts;

class Test{

	public static function test2()
	{
		$s = rand(100000,200000);
		for ($i=0; $i < $s; $i++) { 
		}
	}
}

项目点评 (0)

你可以在登录后,对此项目发表评论

3_float_left_people 3_float_left_close