定时任务没触发 — 四步排查 Cron 问题
排查顺序
按以下顺序排查,每一步排除一个可能性,效率最高:
第一步:Sophclaw 有没有在线
Cron 是 Sophclaw 运行时执行的——Sophclaw 关了,Cron 自然不触发。
检查:
- PC 客户端:看客户端窗口是不是还开着、进程是不是还在跑(任务管理器里能看到)
- 手机 App:必须在前台保持运行(Android 后台限制杀进程)
- 电脑休眠会导致 Sophclaw 停运行:如果你用 PC 客户端,不要让电脑自动休眠
解决:确保 Sophclaw 进程在跑。对于长期运行的场景(比如每天固定时间推送),建议 Sophclaw 跑在一台常开的 PC 或服务器上。
第二步:channel 的 connectionMode 对不对
Cron 定时任务需要 HTTP 模式(不像即时消息只需 WebSocket)。如果你接了飞书/钉钉 channel,需要把 connectionMode 设成 dual:
"feishu": {
"connectionMode": "dual" // 同时开启 WebSocket 和 HTTP
}
如果设成了 websocket,Cron 到点时 channel 收不到触发信号。
怎么确认:在 Sophclaw 配置界面里看 connectionMode 的值——是 dual 就对了。
第三步:任务里有没有会话 ID
创建 Cron 任务时必须指定推送目标的会话 ID。没有会话 ID,Sophclaw 不知道该推给谁。
检查:
- 在 Sophclaw 的定时任务界面里找到你创建的那条任务
- 看任务详情里最后一行有没有会话 ID
- 没有 → 任务没创建成功,需要重新创建
补充会话 ID:
"刚才创建的定时任务缺少会话 ID,补充会话 ID 为 xxxxxxxxxx,请重新创建"
第四步:任务列表里有没有这条任务
通过 Sophclaw 控制台或对话确认定时任务是否真正存在:
"列出我当前所有的定时任务"
如果返回的列表里没有你刚才创建的任务,说明创建没成功——通常是对话里指令写得不够清楚或会话 ID 没给对。
一个完整的排查流程
假设你创建了"每天 9 点飞书推送科技新闻简报"的 Cron 任务,到点了没推送:
- 看 PC 客户端是不是还在运行 → 如果关了,这就是根因
- 看飞书 channel 的 connectionMode 是不是
dual→ 如果是websocket,改掉 - 看定时任务里有没有会话 ID → 如果没有,补充后重新创建
- 如果以上都 OK,手动触发一次看看有没有推送 → 手动触发也不行的话,可能是 Sophnet 云端 Cron 服务临时故障
手动测试一次
创建完 Cron 任务后,建议先手动触发一次验证整条链路通:
"立即执行一次我的定时任务'每天早上 9 点的科技新闻简报'"
如果立即执行能推送到飞书,说明 Cron 配置本身没问题——后面只需要确保 Sophclaw 到点在线。
常见陷阱
陷阱一:电脑自动休眠。PC 用户最常踩的坑——白天正常,晚上到了 Cron 触发时间电脑已经休眠了。解决:设置电源选项里"在不使用时让电脑保持唤醒",或者把 Cron 触发时间设在白天你会用电脑的时间段。
陷阱二:手机端后台被杀。Android 的激进后台管理会在一段时间后杀掉不活跃的 App。用手机端跑 Cron 的话,把 Sophclaw 加到"后台白名单"或"电池优化例外"里。
陷阱三:多条 Cron 任务用同一个名字。如果创建了两条相同名字的 Cron 任务,Sophclaw 可能混乱。每条任务起清晰独特的名字。
还不行怎么办
如果以上全试过了还不触发:
- 删除这条任务 → 重新创建一遍(可能配置被写坏了)
- 重启 Sophclaw(PC 杀进程重开 / 手机强杀重开)
- 等一天——如果 Sophnet 云端 Cron 服务临时故障,一般当天就能恢复
- 联系 Sophnet 客服,报上你的 Sophclaw 账号和任务 ID
一个实用的监控手段
在 Sophclaw 里再创建一条测试用 Cron 任务:
"创建一个每分钟触发一次的定时任务,给我发一条'心跳正常'到飞书"
让它跑 30 分钟——如果能收到心跳,说明 Cron 链路没问题,其他任务不触发是那些任务自身的配置问题;如果连心跳都收不到,说明 Cron 整体链路有问题(在线状态 / connectionMode / 云端服务)。