lizhibin / php-crond
There is no license information available for the latest version (v1.0.9-stable) of this package.
php-crond
v1.0.9-stable
2020-10-26 15:52 UTC
Requires
- php: >=7.2.5
- guzzlehttp/guzzle: 7.0.1
- monolog/monolog: 2.1.1
- react/event-loop: 1.1.1
- react/http: 1.1.0
- symfony/process: 5.1.5
This package is auto-updated.
Last update: 2024-10-19 22:37:40 UTC
README
基于多进程的定时任务管理器,支持秒级别的定时任务
特性
- 通过配置文件管理所有定时任务
- 支持秒级的定时任务粒度
- 使用symfony/process进行进程管理
- 使用React/event-loop执行事件循环
- 提供http服务,远程查看和操作php_crond(参见:API文档)
执行
启动crond
php bin/crond.php
在后台启动crond
nohup php bin/crond.php > /dev/null 2>&1 &
发送USR1信号,安全关闭crond 主进程会等待所有的子进程任务结束,才会正式退出
kill -USR1 `cat logs/crond.pid`
发送USR2信号,重新读取task配置文件
kill -USR2 `cat logs/crond.pid`
基本配置
服务配置文件config/base.php
return [ //模式 'model' => 'daemon', //PHP程序路径 'php' => '/usr/local/php-5.6.30/bin/php', //日志文件 'log_file' => PROJECT_ROOT . "/logs/crond.log", //主进程pid文件 'pid_file' => PROJECT_ROOT . "/logs/crond.pid", //http接口服务,提供接口远程操作php_crond 'http_server' => [ 'switch' => false,//是否启动http服务 'listen' => '127.0.0.1', 'port' => 8080,//监听端口 ], ];
任务配置
任务配置文件config/task.php
/** * task配置文件 * 例子: */ return ['demo' => [ 'daemon' => '* * * * * *',//秒 分 时 日 月 周 'filename' => 'sleep', //执行程序 'params' => ['5'],//执行程序参数 'single' => true,//如果进程在运行,则不执行,只保持一个进程 'standard_ouput' => '/dev/null', //标准输出 'error_output' => '/dev/null', // 错误输出 ]];
如果你需要配置非常多的任务,可以使用Storage\Reader::registerTaskDirectory,该方法会遍历注册目录下的所有.php文件,并返回其中的任务列表
return \Storage\Reader::registerTaskDirectory(__DIR__ . "/tasks");
允许配置外部接口,用于返回任务列表。参数url=接口地址,serverId=作为服务标识
PS:你可能需要额外搭建后台用于任务管理
return \Storage\Reader::registerTaskRemote($url, $serverId);
接口返回例子
{ "demo": { "daemon": "0 * * * * *", "filename": "echo", "params": ["hello world!"], "single": true, "standard_ouput": "/dev/null", "error_output": "/dev/null" } }
安全配置
任务配置文件config/security.php
use Storage\Security\FixedCommandRule; return [ //固定命令 new FixedCommandRule("sleep"), ];