通过Crontab实现以秒为单位执行任务的方法

 
通过Crontab实现以秒为单位执行任务的方法

大家都知道Crontab最小只能设置以分为单位执行任务, 有的时候确实有以秒为单位来执行任务的需求, 比如HA的心跳检测.

现在可以采用一个看起来很笨, 却非常靠谱的方法, 如下示例:

crontab -e

--------------------------------------------------

* * * * * date >>/tmp/test.log

* * * * * sleep 1  && date >>/tmp/test.log

* * * * * sleep 2  && date >>/tmp/test.log

* * * * * sleep 3  && date >>/tmp/test.log

* * * * * sleep 4  && date >>/tmp/test.log

* * * * * sleep 5  && date >>/tmp/test.log

* * * * * sleep 6  && date >>/tmp/test.log

* * * * * sleep 7  && date >>/tmp/test.log

* * * * * sleep 8  && date >>/tmp/test.log

* * * * * sleep 9  && date >>/tmp/test.log

* * * * * sleep 10 && date >>/tmp/test.log

* * * * * sleep 11 && date >>/tmp/test.log

* * * * * sleep 12 && date >>/tmp/test.log

* * * * * sleep 13 && date >>/tmp/test.log

* * * * * sleep 14 && date >>/tmp/test.log

* * * * * sleep 15 && date >>/tmp/test.log

* * * * * sleep 16 && date >>/tmp/test.log

* * * * * sleep 17 && date >>/tmp/test.log

* * * * * sleep 18 && date >>/tmp/test.log

* * * * * sleep 19 && date >>/tmp/test.log

* * * * * sleep 20 && date >>/tmp/test.log

* * * * * sleep 21 && date >>/tmp/test.log

* * * * * sleep 22 && date >>/tmp/test.log

* * * * * sleep 23 && date >>/tmp/test.log

* * * * * sleep 24 && date >>/tmp/test.log

* * * * * sleep 25 && date >>/tmp/test.log

* * * * * sleep 26 && date >>/tmp/test.log

* * * * * sleep 27 && date >>/tmp/test.log

* * * * * sleep 28 && date >>/tmp/test.log

* * * * * sleep 29 && date >>/tmp/test.log

* * * * * sleep 30 && date >>/tmp/test.log

* * * * * sleep 31 && date >>/tmp/test.log

* * * * * sleep 32 && date >>/tmp/test.log

* * * * * sleep 33 && date >>/tmp/test.log

* * * * * sleep 34 && date >>/tmp/test.log

* * * * * sleep 35 && date >>/tmp/test.log

* * * * * sleep 36 && date >>/tmp/test.log

* * * * * sleep 37 && date >>/tmp/test.log

* * * * * sleep 38 && date >>/tmp/test.log

* * * * * sleep 39 && date >>/tmp/test.log

* * * * * sleep 40 && date >>/tmp/test.log

* * * * * sleep 41 && date >>/tmp/test.log

* * * * * sleep 42 && date >>/tmp/test.log

* * * * * sleep 43 && date >>/tmp/test.log

* * * * * sleep 44 && date >>/tmp/test.log

* * * * * sleep 45 && date >>/tmp/test.log

* * * * * sleep 46 && date >>/tmp/test.log

* * * * * sleep 47 && date >>/tmp/test.log

* * * * * sleep 48 && date >>/tmp/test.log

* * * * * sleep 49 && date >>/tmp/test.log

* * * * * sleep 50 && date >>/tmp/test.log

* * * * * sleep 51 && date >>/tmp/test.log

* * * * * sleep 52 && date >>/tmp/test.log

* * * * * sleep 53 && date >>/tmp/test.log

* * * * * sleep 54 && date >>/tmp/test.log

* * * * * sleep 55 && date >>/tmp/test.log

* * * * * sleep 56 && date >>/tmp/test.log

* * * * * sleep 57 && date >>/tmp/test.log

* * * * * sleep 58 && date >>/tmp/test.log

* * * * * sleep 59 && date >>/tmp/test.log

--------------------------------------------------

看一下结果, 基本上很准哦.

tail -100f /tmp/test.log

Thu Jul  7 18:20:00 HKT 2011

Thu Jul  7 18:20:01 HKT 2011

Thu Jul  7 18:20:02 HKT 2011

Thu Jul  7 18:20:03 HKT 2011

Thu Jul  7 18:20:04 HKT 2011

Thu Jul  7 18:20:05 HKT 2011

Thu Jul  7 18:20:06 HKT 2011

Thu Jul  7 18:20:07 HKT 2011

Thu Jul  7 18:20:08 HKT 2011

Thu Jul  7 18:20:09 HKT 2011

Thu Jul  7 18:20:10 HKT 2011

Thu Jul  7 18:20:11 HKT 2011

Thu Jul  7 18:20:12 HKT 2011

Thu Jul  7 18:20:13 HKT 2011

Thu Jul  7 18:20:14 HKT 2011

Thu Jul  7 18:20:15 HKT 2011

Thu Jul  7 18:20:16 HKT 2011

Thu Jul  7 18:20:17 HKT 2011

Thu Jul  7 18:20:18 HKT 2011

Thu Jul  7 18:20:19 HKT 2011

Thu Jul  7 18:20:20 HKT 2011

Thu Jul  7 18:20:21 HKT 2011

Thu Jul  7 18:20:22 HKT 2011

Thu Jul  7 18:20:23 HKT 2011

Thu Jul  7 18:20:24 HKT 2011

Thu Jul  7 18:20:25 HKT 2011

Thu Jul  7 18:20:26 HKT 2011

Thu Jul  7 18:20:27 HKT 2011

Thu Jul  7 18:20:28 HKT 2011

Thu Jul  7 18:20:29 HKT 2011

Thu Jul  7 18:20:30 HKT 2011

Thu Jul  7 18:20:31 HKT 2011

Thu Jul  7 18:20:32 HKT 2011

Thu Jul  7 18:20:33 HKT 2011

Thu Jul  7 18:20:34 HKT 2011

Thu Jul  7 18:20:35 HKT 2011

Thu Jul  7 18:20:36 HKT 2011

Thu Jul  7 18:20:37 HKT 2011

Thu Jul  7 18:20:38 HKT 2011

Thu Jul  7 18:20:39 HKT 2011

Thu Jul  7 18:20:40 HKT 2011

Thu Jul  7 18:20:41 HKT 2011

Thu Jul  7 18:20:42 HKT 2011

Thu Jul  7 18:20:43 HKT 2011

Thu Jul  7 18:20:44 HKT 2011

Thu Jul  7 18:20:45 HKT 2011

Thu Jul  7 18:20:46 HKT 2011

Thu Jul  7 18:20:47 HKT 2011

Thu Jul  7 18:20:48 HKT 2011

Thu Jul  7 18:20:49 HKT 2011

Thu Jul  7 18:20:50 HKT 2011

Thu Jul  7 18:20:51 HKT 2011

Thu Jul  7 18:20:52 HKT 2011

Thu Jul  7 18:20:53 HKT 2011

Thu Jul  7 18:20:54 HKT 2011

Thu Jul  7 18:20:55 HKT 2011

Thu Jul  7 18:20:56 HKT 2011

Thu Jul  7 18:20:57 HKT 2011

Thu Jul  7 18:20:58 HKT 2011

Thu Jul  7 18:20:59 HKT 2011


如果设置每10秒执行一次任务, 那么就如下设置:

--------------------------------------------------

* * * * * date >>/tmp/test.log
* * * * * sleep 9  && date >>/tmp/test.log
* * * * * sleep 19 && date >>/tmp/test.log
* * * * * sleep 29 && date >>/tmp/test.log
* * * * * sleep 39 && date >>/tmp/test.log
* * * * * sleep 49 && date >>/tmp/test.log
* * * * * sleep 59 && date >>/tmp/test.log
--------------------------------------------------

其它依此类推.

不建议那种在shell里通过sleep的方式来实现, 因为shell本身自己需要执行时间, 其实不准的.

--END--

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Linux系统中,`crontab`是一个用于定时执行任务的命令,它可以按照预定的时间间隔或特定的时间点自动执行指定的命令、脚本或程序。但是`crontab`无法直接实现执行一次的功能,因为其最低时间间隔只能到分钟级别。 要实现执行一次的功能,可以借助其他工具来完成,例如结合脚本编程语言(如Shell、Python)和`sleep`命令。可以编写一个循环的脚本,并在每次循环中执行相应的任务,并使用`sleep`命令设置每次循环的时间间隔为1。 下面是一个简单的Shell脚本示例: ```bash #!/bin/bash while true; do # 在这里写入每次循环需要执行的命令或程序 echo "Hello, World!" sleep 1 done ``` 这个脚本会不断地输出"Hello, World!",并在每次输出后休眠1。通过运行这个脚本,就可以实现执行一次的效果。 需要注意的是,这种方法对系统资源的消耗较大,因为每都会创建一个新的进程。此外,如果任务执行的时间超过1,可能会导致任务之间的间隔不准确。因此,如果每执行非常关键,可能需要考虑其他更高级的工具或方法实现。 ### 回答2: crontab 是一种任务计划工具,通常用于在特定时间间隔内执行预定的任务。它的最小精度是分钟级别的,所以无法使用 crontab实现执行一次的功能。 然而,在 Linux 系统中,还有其他方式可以实现执行的需求。一种常用的方法是使用编程语言结合守护进程来实现。我们可以编写一个脚本或程序,利用循环语句,让任务在每钟内重复执行。 例如,我们可以使用 Python 编写一个简单的脚本实现执行一次的效果: ```python import time while True: # 执行你的任务代码 print("每执行一次的任务") time.sleep(1) # 等待 1 钟 ``` 这个脚本会不断地执行打印任务,并在每次任务执行后等待 1 钟。通过循环和延时,我们可以实现执行一次的效果。 需要注意的是,这种方式会一直占用系统资源,并且可能对系统性能产生影响。所以在实际使用时,需要根据具体需求和系统条件来决定是否使用每执行的方式。 ### 回答3: Crontab是一个常用的任务调度程序,用于在固定时间间隔内执行特定的任务。然而,Crontab不支持每执行任务,最小的时间间隔为一分钟。 这是因为Crontab的调度粒度是基于Unix系统的时间分辨率。Unix系统的时间分辨率通常是以单位,因此无法实现执行任务Crontab的最小时间单位是分钟,所以在Crontab中无法直接配置每执行任务。 如果需要实现执行任务,我们可以考虑其他方法。一种方法是使用脚本来实现任务的每执行。我们可以编写一个无限循环的脚本,然后在循环中每执行我们想要的任务。这种方法可以通过shell脚本或者其他编程语言来实现。 另外,还可以考虑使用定时任务调度工具来实现执行任务。这些工具可以提供更细粒度的任务调度,可以实现执行任务。例如,Linux中的工具如at命令和anacron工具可以实现更灵活的任务调度,以满足每执行任务的需求。 总的来说,Crontab不支持每执行任务,最小的时间间隔是一分钟。如果需要实现执行任务,可以考虑使用脚本编程或者其他定时任务调度工具来实现

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值