任务少的时候,点一下就行;任务一多,问题就变成撞车、重跑、卡死。调度的本质不是排时间,而是管理目标、依赖和失败。
把任务拆成四要素
- 目标:哪些设备、哪个分组;
- 动作:步骤序列、输入参数;
- 依赖:前置任务、设备状态、网络;
- 失败策略:重试次数、超时、是否跳过。
四要素写不清楚,任务一定会互相踩。
串行还是并行
- 同一账号、同一资源、同一条网络出口:串行;
- 不同设备、互不共享状态:并行;
- 有共享前置,例如安装包、登录:先串行准备,再并行执行;
- 并发上限按电脑 CPU、网络上行、设备稳定性来定,不要照抄“支持 256 台”。
任务引擎的上限是能力边界,不是建议值。20 台设备和 100 台设备的合理并发完全不同。

定时任务的坑
- 时区不一致,半夜跑成白天;
- 设备休眠或断网,任务到点失败;
- 所有任务整点触发,瞬间打满;
- 平台维护窗口与任务冲突;
- 手机系统更新后重启,任务无人恢复。
建议错峰、加随机延迟、执行前检查在线率,并设置失败告警。
重试要幂等
- 只重试失败项,不重跑整批;
- 重试前确认上一步是否已生效,避免重复提交;
- 指数退避,例如 1 分钟、5 分钟、15 分钟,而不是每秒重试;
- 设置最大次数,超过后转人工;
- 记录每次重试的原因与结果。
卡死怎么发现
- 单步超时;
- 心跳或进度长时间不变;
- 设备离线但任务仍显示执行中;
- 应用弹窗挡住流程。
调度系统要有超时即失败的规则,不能无限等。
优先级与配额
- 关键任务高优先级,可抢占;
- 大批量任务放低优先级,错峰跑;
- AI 任务单独配额,避免占满资源;
- 同一设备同一时间只跑一个任务。
诺程投屏的 AI 任务采用持久队列,按优先级、并发与模型配额调度,每台设备独立执行,一台失败不影响其他设备。普通批量任务也按设备记录状态。
一个最小可用的调度模板
- 任务名:日期、场景、分组;
- 前置检查:在线、解锁、存储、版本;
- 执行:串行准备加并行主体;
- 校验:截图或页面状态;
- 失败:只重试失败项,最多 3 次;
- 收尾:释放设备、记录结果。
失败告警怎么做
- 任务连续失败 N 次触发通知;
- 设备离线超过阈值单独告警;
- 磁盘、CPU、内存接近上限提前告警;
- 告警内容带设备、任务、错误码和截图路径;
- 区分“需立即处理”和“可次日处理”。
告警太多等于没有告警,阈值要按业务定。
先手动跑通,再自动化
任何任务先手动执行 3 次,确认步骤稳定,再做成定时。自动化不会修复一个本来就不稳定的流程,只会让它更快地失败。
录制与脚本的边界见自动操作能力边界,脚本维护见界面改版后的维护。
常见问题
群控任务应该串行还是并行?
看是否共享账号、资源或网络出口。互不相关的设备可以并行,有共享前置的先串行准备。
任务失败后要整批重跑吗?
不需要。按设备和文件记录状态,只重试失败项,避免重复操作成功的设备。
定时任务为什么总在半夜失败?
常见于时区设置错误、设备休眠断网或系统更新重启,执行前要做在线与状态检查。