服务公告

服务公告 > 常见问题 > 计划任务重复执行:crond 与定时器并存

计划任务重复执行:crond 与定时器并存

发布时间:2026-01-24 07:09
## 症状 业务侧报告数据被处理了两次:备份目录里同一天出现两份一模一样的文件,报表数字翻倍,清理任务执行两遍。登机器查脚本日志,同一分钟内确实有两次完整执行,两次间隔不到一秒,像是有两个调度者在同时发号施令。 ## 定位 重复执行的来源几乎总是两套调度机制并存。分别列出两边的任务清单核对。 ``` crontab -l systemctl list-timers --all ``` 同一个任务名或同一条命令同时出现在两边,病根就找到了。常见的发生路径:系统升级后发行版把某些任务从 cron 迁到了 systemd 定时器,旧条目没删干净;或者团队里两个人各按自己的习惯装了一边;还有安装包自带的定时器与手工加的 crontab 撞车。重复的间隔完全一致时最容易确认,精确到分钟对表即可,两个执行入口的日志时间戳一比对,重叠部分就是双重调度的现场。 ## 解决 选定一套机制收敛。判断标准很简单:需要精确到分钟级、脚本简单直接的,留在 cron;需要依赖管理、错过补跑、随机延迟的,用 systemd 定时器。收敛动作是把另一边的条目注释或删除,然后观察一个完整周期,执行次数回到一次才算完成。两侧都在管同一任务的过渡期,先停一边再删,别两边同时动,改动期间多看一眼执行日志,确认没有空窗也没有叠加。 ## 预防 团队的调度机制约定成文,新任务一律走约定的一边,例外要登记原因。任务本身做成幂等是更深的防线:重复执行一次不产生副作用,数据按唯一键去重,文件按日期命名覆盖写,调度层哪怕再出岔子,业务层也不受损。把关键任务的执行次数纳入监控,次数异常立刻告警。顺云云服务器上做例行任务盘点时,两条清单并排过一遍,重复注册这类问题十分钟就能清干净。