在日常的系统运维或自动化脚本开发中,我们经常需要在特定时间执行某些任务。传统的
crontab虽然简单易用,但其最小时间单位是“分钟”,无法满足毫秒级或更高精度的调度需求。本文将手把手教你如何在 Ubuntu 系统中实现 高精度定时任务,涵盖
systemd timer、
at命令以及使用 Python 或 Shell 脚本配合 sleep 的进阶方法。

为什么需要高精度定时任务?
标准的
crontab只能精确到分钟级别,对于需要每秒、每毫秒甚至更精细控制的任务(如数据采集、实时监控、高频交易模拟等),它就显得力不从心了。此时,我们需要更灵活的工具——这就是 systemd timer 和其他高精度调度方法登场的时候。
方法一:使用 systemd timer(推荐)
systemd是现代 Linux 发行版(包括 Ubuntu 16.04 及以上)的默认初始化系统。它提供了比
crontab更强大、更精确的定时器功能,支持微秒级精度,并可与系统日志、依赖管理无缝集成。
步骤 1:创建服务单元文件
假设我们要每 10 秒执行一个脚本
/home/user/mytask.sh,首先创建一个服务文件:
关键参数说明: 查看状态: 如果你只需要秒级精度(例如每 2 秒执行一次),可以编写一个简单的后台脚本: 然后将其放入后台运行: 但 - 对于 毫秒级高精度定时任务,强烈推荐使用 通过本文,你已经掌握了在 Ubuntu 中实现 高精度定时任务 的多种方法。无论是系统级的 SEO关键词回顾:Ubuntu高精度定时任务、Linux定时器、systemd timer、crontab替代方案# /etc/systemd/system/mytask.service[Unit]Description=My High-Precision Task[Service]Type=oneshotExecStart=/bin/bash /home/user/mytask.shUser=user步骤 2:创建定时器单元文件
# /etc/systemd/system/mytask.timer[Unit]Description=Run MyTask every 10 seconds[Timer]OnBootSec=10OnUnitActiveSec=10AccuracySec=1ms[Install]WantedBy=timers.targetOnBootSec=10
:系统启动后 10 秒首次运行 OnUnitActiveSec=10
:每次任务完成后 10 秒再次运行 AccuracySec=1ms
:设置定时器精度为 1 毫秒(默认是 1 分钟!)步骤 3:启用并启动定时器
sudo systemctl daemon-reloadsudo systemctl enable --now mytask.timersystemctl list-timers --all | grep mytask方法二:使用循环脚本 + sleep(适用于秒级任务)
#!/bin/bashwhile true; do /path/to/your/script.sh sleep 2 # 每2秒执行一次donenohup ./loop_task.sh & 注意:
sleep
的精度受系统调度影响,通常误差在几毫秒内,不适合对时间要求极其严格的场景。方法三:使用 at 命令(一次性高精度任务)
at
命令可以安排任务在指定时间点运行,支持秒级时间格式:echo "/path/to/script.sh" | at 14:30:45at
不适合周期性任务,仅用于一次性调度。总结与建议
systemd timer
并设置 AccuracySec=1ms
。
- 对于简单的 秒级循环任务,可用 Shell 脚本 + sleep
实现。
- 避免滥用高频率任务,以免占用过多 CPU 资源。
- 所有方法均适用于 Ubuntu 18.04、20.04、22.04 等主流版本。systemd timer
,还是轻量级的循环脚本,都能满足不同场景的需求。赶快动手试试吧!
