对账任务从每小时一次变成两次 两份日志文件同时增长 时间点相差十几秒 代码里没有任何循环 重跑一遍才看出是两套调度都在拉它。乍看像缓存或者权限的锅,追下去往往不是。
systemctl list-timers --all crontab -l | grep -n reconcile ps -o pid,ppid,cmd -p $(pgrep -f reconcile.py)
追下去是这么回事:迁移时只把 crontab 注释掉没有删 后来有人恢复过一次 加上 timer 也 enable 了 两套调度各跑各的 谁都以为自己是唯一入口 重复也就成了必然。
「systemd timer 与 cron 重复」这个问题文档写得含糊,实际行为以当前版本为准,别照旧版本的结论套。测试环境和线上的差别,往往就在版本号和那几行被忽略的配置上。
线上出问题先对时间点,跟发布、备份、任务执行的时刻排一排,能省掉一半功夫。
具体做法是,先确认重复的两条日志分别由谁拉起 对比进程号和父进程;只保留一套调度 另一套彻底删除并重新加载配置;迁移期间先停 timer 再改 crontab 两步之间不要留出太长的空窗期。
验收就看一点,每小时只出现一条执行日志 两套调度里只剩一套真正生效 不再重叠。
