当使用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以秒为单位执行脚本,比如 cornicron
、cronie
、fcron
等。
以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
命令和循环语句需要手动编写逻辑,适用于简单的场景,而使用专门的工具则可以自动实现以秒为单位的调度。根据实际需求,选择不同的方法即可。