直接用 composer require hyperf/crontab 就能装好定时任务组件,它会自动注册;但需手动在 processes.php 中注册 crontabdispatcherprocess 进程、启用 crontab.php 的 enable 配置,并确保 scan 路径与任务类目录一致,否则任务不会被调度。

直接用 composer require hyperf/crontab 就能装好定时任务组件,不需要手动改配置或额外启用。它会自动注册,启动服务时就生效。
安装命令与版本适配
在已创建的 Hyperf 项目根目录下执行:
- 安装最新稳定版(适配 Hyperf v3.x):
composer require hyperf/crontab - 如需指定版本(例如兼容 v2.2):
composer require hyperf/crontab:^2.2 - PHP 版本必须 ≥ 8.0(v3.x),≥ 7.3(v2.2);Composer 建议 ≥ 2.2,避免依赖解析失败
配置文件自动生成
安装后,框架会自动加载 crontab 组件,但需确认配置存在:
- 运行 php bin/hyperf.php vendor:publish hyperf/crontab,生成 config/autoload/crontab.php
- 检查该文件中
'enable' => true是否开启;'scan' => ['App\Crontab']路径是否匹配你的任务类目录 - 时区建议设为
'timezone' => 'Asia/Shanghai',避免 cron 表达式误判
注册调度进程(关键一步)
Hyperf 的定时任务靠独立进程驱动,必须显式注册:
- 编辑 config/autoload/processes.php
- 加入这一行:
\Hyperf\Crontab\Process\CrontabDispatcherProcess::class - 缺了这行,任务不会被调度,即使配置正确也静默失效
写一个可用的任务类
在 app/Crontab/ 下新建 PHP 类,比如 DemoCrontab.php:
- 继承 Hyperf\Crontab\AbstractCrontab 或直接用 @Crontab 注解
-
$rule支持标准 5 段(分时日月周)或 6 段秒级格式(如'*/10 * * * * *') - 启用单例防重复:
public array $singleton = true - 需要跨节点防重?加
public array $mutex = ['type' => 'redis'](确保 Redis 已配置)
验证是否跑起来
启动服务后观察两处:
- 控制台启动日志出现 [INFO] Crontab manager started with X tasks
- 任务首次执行不是立即触发,而是等下一个匹配时间点(例如设
'* * * * *',启动在 14:02:30,则第一次执行在 14:03:00) - 可在
execute()中写var_dump(date('H:i:s'));或记录日志,确认频率是否符合预期











