什么是 PHP 任务调度器?
任务调度器(Job Scheduler)是一个 PHP 库,它允许直接从应用程序代码中执行周期性任务(cron 任务),而无需依赖系统 crond。它特别适用于对 crontab 访问受限的共享主机环境或容器化环境(Docker)。
为什么需要任务调度器?
- 自主性 — 所有周期性规则都存储在 PHP 代码中,而不是系统配置文件中。
- 灵活性 — 可以动态更改计划、暂停任务、记录执行情况。
- 集成性 — 易于集成到框架(Laravel、Symfony)和 ORM 中。
安装
通过 Composer 安装:
composer require dragonmantank/cron-expression这是一个用于处理 cron 表达式的基础库。要使用完整功能的任务调度器,常会用到 peppeocchi/php-cron-scheduler:
composer require peppeocchi/php-cron-scheduler主要功能
- 解析 cron 表达式 — 检查当前时间是否匹配模板(
* * * * *)。 - 多任务处理 — 在单个进程中启动多个任务。
- 并行处理 — 通过
exec()或pcntl_fork()实现。 - 日志记录 — 将 stdout/stderr 输出到文件。
- 错误处理 — 重试机制、通知功能。
代码示例
<?phprequire 'vendor/autoload.php';
use GO\\Scheduler;
$scheduler = new Scheduler();
// 任务:每分钟执行$scheduler->call(function() { echo "执行于 " . date('Y-m-d H:i:s') . "";})->everyMinute();
// 任务:每小时的第30分钟执行$scheduler->call('cleanup_logs')->at('30 * * * *');
// 任务:工作日每天早上9:00执行$scheduler->exec('php artisan report:generate')->at('0 9 * * 1-5');
// 启动所有就绪的任务$scheduler->run();何时使用
PHP 任务调度器非常适用于:
- 按计划发送电子邮件群发;
- 清理过期数据(日志、会话);
- 在非高峰时段生成报告;
- 与外部 API 同步(每小时一次);
- 更新缓存(每5分钟一次)。
不要用它来替代关键系统操作(如数据库备份、证书更新)所需的系统级 cron——应将其用作业务逻辑的附加层。