千家信息网

如何让Crontab每秒钟执行一次任务

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要介绍如何让Crontab每秒钟执行一次任务,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Crontab是linux下定时调度配置文件,通过它,我们可以让系统的程序、
千家信息网最后更新 2026年11月02日如何让Crontab每秒钟执行一次任务

这篇文章主要介绍如何让Crontab每秒钟执行一次任务,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

Crontab是linux下定时调度配置文件,通过它,我们可以让系统的程序、脚本、命令、任务按设定的时间、间隔、周期循环的运行。 在Crontab里时间粒度最小的是分钟。也就是说,通过Crontab配置,我们最多可以让目标任务每分钟执行一次,更频繁的执行是不行的,只能借助其它方法。

比如说,如果希望一个程序每30秒执行一次,该怎么办呢?

变通的方法还是有的。 一种思路是,在Crontab里添加两条配置,一条是正常调度,每分钟执行一次,另一条是等待30秒后才执行。

# Need these to run on 30-sec boundaries, keep commands in sync.* * * * *              /path/to/executable param1 param2* * * * * ( sleep 30 ; /path/to/executable param1 param2 )

这种方法感觉有点生硬,怪怪的,但的确可行。这种方法实际是可以简写成一行:

* * * * * /bin/bash -l -c "/path/to/executable; sleep 30 ; /path/to/executable"

还有一种方法是使用watch命令:

$ watch --interval .30 script_to_run_every_30_sec.sh

但watch是命令行工具,我们可以使用nohup命令让它在后台运行。

SystemD定时器

如果我们使用的linux系统里有SystemD,可以使用SystemD定时器在任何时间粒度上调度程序,理论上可以小到纳秒级别--当然,这样做有点疯狂。总之,它在任务调度上的灵活性远比Cron要高--无需使用sleep这种蹩脚的方案。

比起一行完成配置的crontab来说,建立一个SystemD定时器会显得稍微复杂一些,但为了更好的实现小于'每分钟'粒度的调度任务,这种方法值得尝试。

SystemD定时器实现原理简单说就是两部分:一个系统service,一个SystemD定时器。SystemD定时器执行调度,而任务是写在service里。

下面有个简单的例子,目标是让系统logger每十秒钟输出一次"Hello World";

/etc/systemd/system/helloworld.service

[Unit]Description=Say Hello[Service]ExecStart=/usr/bin/logger -i Hello World

/etc/systemd/system/helloworld.timer

[Unit]Description=Say Hello every 10 seconds[Timer]OnBootSec=10OnUnitActiveSec=10AccuracySec=1ms[Install]WantedBy=timers.targethelloworld.timer里并没有声明service的名称,那它和service是如何关联的呢?没错,因为它们的名称相同,都是helloworld。

如果想让整个系统使用这个定时器,这两个文件就需要放置在/etc/systemd/system下。如果想给某个用户使用,则放置在~/.config/systemd/user。想让这个定时器立即运行,需要执行下面的命令:

systemctl enable --now helloworld.timer

里面的-now标记是让定时器立即执行。否则,只有等系统重启后,或者用户登录是才会触发运行。

[Timer]部分里的各个字段的作用如下:

  • OnBootSec - 系统启动多少秒后开始执行调度
  • OnUnitActiveSec - 重复调度相关service的时间间隔。就是这行配置决定了跟cron job一样定时调度的动作。
  • AccuracySec - 定时器精度。 默认是一分钟,跟cron很相似。可以要求的更高,但精度增加会带来更多系统的消耗,更频繁的唤醒CPU。上面的配置里写的是1ms,显然不是个聪明的决定。通常我们可以把它设置为 1(1秒),对于我们这样低于1分钟时间粒度的定时器的精度要求已经够用了。也是因为如此,我们会看到,实际程序运行时输出"Hello World"消息的时间经常会延迟1秒左右。如果你认为这一秒左右的延迟不是问题,那就应该这样设定。

你会发现,SystemD定时器和Crontab定时器并不是一样的--任务调度的周期并不是按年月日小时分钟周期设定的,它是按我们第一次执行它的时间开始,每次追加一个周期的时间。如果我们钟情于Crontab那样的时间配置方式,SystemD定时器也是支持的,那就需要把OnBootSec和OnUnitActiveSec去掉,换成OnCalendar,下面是一个例子:

OnCalendar=*-*-* *:*:00,10,20,30,40,50

最后补充一点,默认情况下,SystemD定时器和service的关联是通过相同的名称,如果你愿意,也可以在[Timer]配置里通过指定Unit字段配对。

上面的几种方法都可以实现低于分钟粒度的定时调度任务。各有优点。SystemD定时器看起来更正规,但稍微复杂了一点。Crontab+sleep方式虽然别扭,但对于一些小任务来说没有不能胜任的。

以上是如何让Crontab每秒钟执行一次任务的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!

定时器 调度 任务 时间 系统 配置 方法 命令 粒度 运行 周期 程序 名称 精度 面的 复杂 相同 频繁 一行 例子 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 中关村互联网 科技集团 国智互联网科技 互联网科技集团 北京禾田雨橡互联网科技 唐信互联网科技 大连 奔汉互联网科技 深圳期待互联网科技 深圳市运趣互联网科技有限公司 深圳前海聚择互联网科技有限公司 阿里互联网科技公司 荆州市昕露互联网络科技有限公司 杭州壁岐互联网科技有限公司 电子科技大学互联网创业大赛 互联网行业科技股 工业互联网等科技实现智能化赋能 互联网科技数字货币 互联网与数字科技关系 抖集互联网科技技术咨询 湖北辰鑫科技互联网 中国互联网公司的科技投入 互联网科技有限公司经营范围 科技创新互联网企业 上海亿帐通互联网科技 中国的互联网科技企业的崛起 中国航天科技大学国际工业互联网 内蒙古九一互联网科技 互联网在线教育科技创业 互联网科技公司营业执照怎么办理 科技互联网公司两年变化 广东猫王互联网科技有限公司电话
0