wangruyi/php-crond
Composer 安装命令:
composer require wangruyi/php-crond
包简介
php crontab base on symfony/process
关键字:
README 文档
README
一个简单易用的PHP定时任务调度框架,通过创建子进程执行定时任务,支持Cron表达式,轻量级且易于集成到现有项目中。
特性
- 支持标准Cron表达式(分、时、日、月、星期)
- 使用子进程执行任务,避免阻塞主进程
- 内置日志轮转(可选的按日期分割日志文件)
- 兼容Windows和Unix-like系统
- 易于与ThinkPHP、Laravel等框架集成
- 提供灵活的Job配置(任务名称、工作目录、输出文件等)
安装
composer require wangruyi/php-crond
快速开始
基本使用
<?php use Wangruyi\PhpCrond\Scheduler; use Wangruyi\PhpCrond\Job; $sch = new Scheduler(); $job = new Job('* * * * *', 'php echo.php -a=1001', 'echo', 'log/echo.log'); $sch->addJob($job); $job2 = new Job('*/2 * * * *', 'php -v', 'phpv', 'log/echo.log'); $sch->addJob($job2); $sch->run();
Job构造函数参数说明
Job类的构造函数声名如下:
public function __construct($moment, $command, $name='', $output='', $cwd=null)
- $moment:Cron表达式,如
* * * * *表示每分钟执行。 - $command:需要执行的Shell命令。
- $name:任务名称,用于标识任务(可选)。
- $output:输出日志文件路径。如果留空,输出将被丢弃。支持日期变量,例如
log/echo_{Ymd}.log,详见下文。 - $cwd:执行命令时的工作目录(可选,默认当前目录)。
输出日志与FileOutput
框架内置了 FileOutput 类,可以自动按日期分割日志文件。在$output参数中使用 {Ymd} 等占位符即可启用日期分割。例如:
$job = new Job('* * * * *', 'php echo.php', 'task', 'log/echo_{Ymd}.log');
这将在 log 目录下生成类似 echo_20250101.log 的日志文件。
如果不使用占位符,日志将始终写入同一个文件。
setOutput 方法
Job 类还提供了 setOutput 方法,允许在运行时动态更改输出文件路径。该方法同样支持日期变量替换,用法与构造函数中的 $output 参数一致。例如:
$job->setOutput('log/another_{Ymd}.log');
调度器 Scheduler
Scheduler 负责管理所有任务,并在无限循环中检查并执行到达时间的任务。
主要方法:
addJob(Job $job):添加单个任务。addJobs(array $jobs):批量添加任务。run():启动调度器,将一直运行直到被手动终止。
与ThinkPHP集成示例
ThinkPHP用户可以在自定义Command中调用调度器:
namespace app\common\command\system; use think\console\Command; use think\console\Input; use think\console\Output; use Wangruyi\PhpCrond\Job; use Wangruyi\PhpCrond\Scheduler; class Schedule extends Command { protected function configure() { $this->setName('schedule:run') ->setDescription('定时任务调度器入口'); } protected function execute(Input $input, Output $output) { $sch = new Scheduler(); $jobs = [ new Job('*/10 * * * *', 'php think order:stat', 'stat', '/var/logs/order_stat.log'), new Job('4 0 * * *', 'php think order:settlement', 'settlement', '/var/logs/order_settlement.log'), ]; $sch->addJobs($jobs); $sch->run(); } }
注意事项
- 运行环境:本框架仅能在CLI模式下运行,不可用于Web请求。
- Windows支持:在Windows系统下,命令构建会自动适配(使用
cmd /C),但复杂命令可能需要测试。 - 日志目录:请确保输出日志文件所在的目录存在且可写,否则任务可能执行失败。
- 长时间运行:调度器启动后会无限循环执行,请使用进程管理工具(如Supervisor)来管理服务。
- Cron表达式:仅支持到分钟级别,秒级不支持;如果任务没有按预期执行,请检查Cron表达式是否正确。
贡献
欢迎提交Issue和Pull Request来改进本项目。
许可证
本项目基于MIT许可证开源。
wangruyi/php-crond 适用场景与选型建议
wangruyi/php-crond 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 17 次下载、GitHub Stars 达 0, 最近一次更新时间为 2023 年 05 月 10 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「crontab」 「php schedule」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 wangruyi/php-crond 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 wangruyi/php-crond 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 wangruyi/php-crond 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
Enables the creation of cron-jobs tasks to be consumed by symfony/messenger
Provides a possibility to auto-setup crontabs required for project based on configuration file.
symfony bundle for jobbyphp/jobby
A Deployment/Change Log Schedule and Notes system for SilverStripe sites
Monitoring for scheduled jobs
Yii2 scheduler module
统计信息
- 总下载量: 17
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 1
- 点击次数: 16
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2023-05-10