Plainnotes

用 flock 防止定时任务重叠

2026-02-18 · 2 分钟工具

备份任务每 10 分钟一次,某次跑了 25 分钟,后面几次叠在一起,磁盘 IO 直接打满。

最简单的互斥是 flock:

*/10 * * * * flock -n /var/lock/backup.lock /usr/local/bin/backup.sh

-n 表示拿不到锁立刻退出,不排队。不加 -n 会一直等,任务堆积反而更糟。

注意锁文件要放在所有使用者都能写的地方,且不要和 logrotate 之类的工具抢同一个路径。systemd 服务也可以用 flock 包一层,或者直接用 Type=oneshot 加 RemainAfterExit=no 配合 timer 的 AccuracySec。

排查时 fuser -v /var/lock/backup.lock 能看出谁拿着锁。