首页/系统/Linux 运维命令速查/需要秒级定时的三种方案
定时任务与计划50 条

需要秒级定时的三种方案

cron 最小粒度是分钟:秒级调度用 systemd timer(OnUnitActiveSec=5s)、sleep 循环脚本,或程序内调度器(quartz等)实现。

Linux 运维命令速查系统更新于 2026-10-13

cron 能做秒级定时吗

cron 的最小调度粒度是分钟,字段写成六段也不会被识别。要做到秒级周期,现实中有三条路:用 systemd timer 的 OnUnitActiveSec 指定秒级间隔、写一个 sleep 循环脚本、或者把定时逻辑放进应用内部调度器。选哪条路取决于对可靠性与运维成本的要求。

基本信息

硬性限制cron 最小粒度为一分钟
可用方案systemd timer / sleep 循环脚本 / 应用内调度器
timer 关键项OnBootSec、OnUnitActiveSec、AccuracySec
循环脚本特点实现简单,但没有守护能力

典型使用场景

  • 需要 5 秒级的健康探测或队列检查
  • 秒级刷新缓存或同步小批量数据
  • 临时实验时用循环脚本快速验证思路
  • 业务逻辑紧密耦合的周期动作,放在进程内调度
  • 需要精确对齐到某一秒的定时任务
  • 替代 cron 处理高于分钟级的频率需求

systemd 秒级方案

systemd 秒级方案
# /etc/systemd/system/check.timer
[Timer]
OnBootSec=10
OnUnitActiveSec=5s
AccuracySec=1s

# 启用
systemctl daemon-reload
systemctl enable --now check.timer
systemctl list-timers check.timer --no-pager   # 查看下次触发时间
journalctl -u check.service -n 20              # 查看执行记录

循环脚本方案

循环脚本方案
while true; do
  /opt/app/check.sh >> /var/log/check.log 2>&1
  sleep 5
done
# 简单直接,但崩溃之后不会自愈

方案对照

方案精度可靠性
systemd timer秒级,受 AccuracySec 影响高,有日志与依赖管理
sleep 循环脚本近似间隔低,崩溃后不会自愈
应用内调度取决于实现与业务进程生命周期绑定
cron最小一分钟高,但不支持秒级
sleep 5 叠加任务耗时 3 秒时,实际间隔会变成 8 秒;需要固定节拍时,用 timer 的日历触发让系统对齐触发点更稳妥。
秒级频率会放大日志量、锁竞争与告警噪音,上线前先确认真有 5 秒级的业务价值,多数场景分钟级已经足够。
循环脚本没有守护能力,进程崩溃后不再恢复。需要长期运行时,把它放进 systemd 单元或容器编排里托管。
如果目的只是错开整点拥堵,用 cron 选非整点时刻或加随机延迟就够了,不必为错峰引入秒级调度,后者的运维成本要高得多。
秒级任务排查更依赖日志:为它单独指定日志位置,并把每次执行的开始与结束时间写进去,才能分清是漏跑还是执行失败。

易错点

  • 用 sleep 循环凑秒级:任务耗时叠加导致间隔漂移,节拍并不稳定
  • 为秒级频率牺牲可维护性:日志与告警量暴涨,监控反而失效
  • 裸跑循环脚本:崩溃后无人重启,任务静默停止
  • 误以为 cron 支持秒字段:写成六段被忽略或报错,任务根本不执行

数据来源与参考

  • man 5 systemd.timer(OnUnitActiveSec)
  • systemd.time(7)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌