Webman 无内置可视化任务管理界面,其定时任务基于 workerman/crontab,在 Worker 进程内运行,不支持运行时增删改查、状态监控与分布式锁;需通过外置调度服务(如 Redis 队列+独立消费者、自研后台或 XXL-JOB)实现可视化管理。

Webman 本身不带可视化任务管理界面,所谓“Webman 可视化管理定时任务”,必须自己搭或集成第三方工具——直接指望框架内置后台?没有。
Webman 的定时任务本质是进程内 Crontab 实例
Webman(基于 Workerman)的定时能力来自 workerman/crontab 组件,它在 Worker 进程启动时注册 Crontab 对象,靠事件循环驱动执行。这意味着:
- 任务定义写死在 PHP 类里(如
app/process/Task.php),改一次就得 reload 进程 - 没有运行中增删改查任务的能力,更没有状态监控、失败重试、日志聚合等运维功能
-
Crontab表达式格式是「秒 分 时 日 月 周」6 位,不是传统 cron 的 5 位;写成* * * * *会少一位,实际被解释为「每小时执行一次」 - 所有任务共享同一个 Worker 进程的内存和 CPU,一个卡住(比如数据库慢查询耗时 10 秒),后面的任务全排队
想可视化?得绕开 Webman 原生机制
真正能“可视化管理”的方案,都是把调度逻辑从 Webman 进程里抽出来,用独立服务 + Web 界面来承载:
- 用 Laravel Horizon 或 Clockwork 搭个轻量后台,把 Webman 的定时触发逻辑改成发消息到 Redis 队列,再由另一个常驻进程消费执行
- 自己写个简单的管理后台:前端用 Vue/React,后端提供 REST API(如
/api/tasks),把任务配置存进 MySQL 或 SQLite,另起一个 CLI 脚本每 5 秒轮询数据库,匹配next_run_at <= NOW()的任务并调用对应逻辑 - 接入开源调度平台,比如
Apache DolphinScheduler或XXL-JOB(需加一层 HTTP 触发适配器),适合中大型项目但引入复杂度
注意:php start.php restart 会杀掉旧进程再拉新进程,导致任务中断;必须用 php start.php reload 才能平滑更新 Crontab 实例。
立即学习“PHP免费学习笔记(深入)”;
常见失效原因:reload 没做对 + 表达式写错 + 无错误捕获
90% 的“任务没跑”问题集中在三处:
- 改了
process/Task.php后只改代码不执行php start.php reload,旧进程还在跑老逻辑 - Cron 表达式漏写秒位,比如
'* * * * *'(5 位)→ 实际变成每小时执行;正确写法是'*/10 * * * * *'(每 10 秒) - 任务函数里抛出未捕获异常(如 PDOException),整个
Crontab实例会静默退出,且不会打任何日志 —— 必须手动包try/catch并写入文件或 syslog
最易被忽略的是:Webman 的 Crontab 不支持分布式锁。多台机器部署同一套代码?任务会被重复执行。真要高可用,得自己加 Redis SETNX 或数据库唯一约束。



















