让Linux下的cron以秒为单位执行shell脚本的3种方法

  • Post category:Linux

当使用Linux系统自带的cron(定时任务)执行shell脚本时,默认的时间粒度为分钟级别,可能无法满足一些精确性较高的需求。那么如何让cron以秒为单位执行shell脚本呢?下面提供3种方法:

方法一:使用sleep命令

在shell脚本中,使用sleep命令等待指定时间后再执行下一条命令,可以实现以秒为单位执行脚本的目的。我们可以在cron调用的shell脚本中加上下面的命令:

sleep 10

表示等待10秒后再继续执行下面的命令。

示例1:定时每隔5秒执行一次脚本

(1)编写一个名为test.sh的shell脚本,内容如下:

#!/bin/bash
echo `date` >> /tmp/test.log

(2)为这个脚本添加可执行权限:chmod +x test.sh

(3)打开cron配置文件,将下面的命令添加到文件末尾:

*/5 * * * * * user /path/to/test.sh >/dev/null 2>&1

这条命令的含义是:每5秒执行一次test.sh脚本,由用户user执行,并将输出重定向至空设备。

方法二:使用循环语句

在shell脚本中,可以使用while循环语句等待指定时间后再执行下一次循环,从而实现以秒为单位执行脚本的目的。

示例2:定时每隔2秒执行一次脚本

(1)编写一个名为test.sh的shell脚本,内容如下:

#!/bin/bash
while true
do
    echo `date` >> /tmp/test.log
    sleep 2
done

(2)为这个脚本添加可执行权限:chmod +x test.sh

(3)打开cron配置文件,将下面的命令添加到文件末尾:

* * * * * * user /path/to/test.sh >/dev/null 2>&1

这条命令的含义是:每秒都执行一次test.sh脚本,由用户user执行,并将输出重定向至空设备。在test.sh脚本中使用while循环语句,每隔2秒执行一次循环。

方法三:使用专门的工具

在Linux系统中,也有专门的工具可以让cron以秒为单位执行脚本,比如 cornicroncroniefcron等。

fcron为例,下面介绍如何安装和配置fcron:

(1)使用yum或者apt-get等命令安装fcron

(2)打开fcron配置文件/etc/fcron.conf,设置以下参数:

## 让fcron以秒为单位执行任务
Resolution: 1

## 设置任务最小时间间隔
SystimeLow: 10

## 设置任务最大时间间隔
SystimeHigh: 3600

## 设置任务执行优先级
RunAsHighPriority: false

这些参数的含义可以参考fcron的官方文档。

(3)重启fcron服务使配置生效:systemctl restart fcron

(4)将要执行的任务添加到fcron的任务计划列表中,比如命令:

fcrontab -e

然后在此文件中添加类似于cron的任务调度命令。

总结:

以上就是让Linux下的cron以秒为单位执行shell脚本的3种方法。其中使用sleep命令和循环语句需要手动编写逻辑,适用于简单的场景,而使用专门的工具则可以自动实现以秒为单位的调度。根据实际需求,选择不同的方法即可。