记录一下那天晚上的排查过程。迁移时两套定时机制都留着,同一份清理脚本一天执行两次,第二次把正在使用的文件删掉了。

原因不止一个,得分开看。旧的任务定义没有随迁移一起清理。也可能是两套机制的时间表达式指向同一时刻。

少数情况下是脚本没有做幂等和互斥。

第一件事是列出所有定时任务

crontab -l && systemctl list-timers --all

再往下确认重复的条目

systemctl cat cleanup.timer | grep OnCalendar

接着停用旧的机制

crontab -r

等前面都确认过,再加锁后验证一次

flock -n /var/lock/cleanup.lock /opt/cleanup.sh

同事提醒我看一下最近一次发布,时间点确实对得上。

别只看报错消失,验证要多做一步。任务每天只执行一次,文件不再被重复删除,日志时间点唯一。

补一句。迁移清单里要专门有一项检查定时任务,两套机制并存最容易被忽略,出事却是数据级的;迁移当天就把旧任务停掉并记录在案。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。

作者 9823189