在 Ubuntu(Linux)里说的“定时器重复执行”,通常指下面几种情况之一。我先说常见原因,再分别说明系统级定时器(cron / systemd timer)和程序内定时器为何会“重复”。
例如:
* * * * * /home/user/backup.sh
含义是:每分钟执行一次,很多人以为是“每天一次”。
✅ 正确示例:
0 2 * * * /home/user/backup.sh
(每天 2:00)
检查以下位置是否重复:
crontab -l
/etc/crontab
/etc/cron.d/*
➡️ 同一脚本在多个地方存在 → 会执行多次
如果脚本执行 2 分钟,但 cron 每分钟一次:
* * * * * long_task.sh
就会叠加执行
✅ 解决方法:
* * * * * flock -n /tmp/lock.file long_task.sh
示例:
[Timer]
OnCalendar=*:0/5
表示:每 5 分钟执行一次
✅ 只执行一次应写:
[Timer]
OnCalendar=2026-01-21 10:00:00
[Timer]
Persistent=true
如果系统关机错过时间,开机后会补跑一次
systemctl list-timers
检查是否有多个 timer 触发同一个 .service
Node.js 示例:
setInterval(() => {
doSomething();
}, 1000);
如果反复调用函数 → 会越跑越多
✅ 正确:
const id = setInterval(...)
clearInterval(id)
➡️ 每个实例都有自己的定时器
你可以对照检查:
如果你能告诉我:
我可以直接帮你指出是哪一行导致重复执行。