今天领导让我配置一个服务器job,要求是暂时每秒钟都要跑一次。本来想到去crontab配置。Linux的定时任务简单地配置到crontab里面就可以了,设置方法也很简单,如下所示,6个参数依次表示为“分、时、日、月、周和具体任务”(示例为每天凌晨3点执行freshclam工作)。
[root@student ~]# crontab -l
0 3 * * * freshclam
所以,从5个时间参数来看最小是精确到某一分钟执行。当然,通过互相组合已经满足绝大多数定时任务的需求了,毕竟,秒级别的定时任务还是比较少见和少用到的。既然5个时间参数没法实现,就只能靠其他方法了。于是想到写一个脚本,就如以下Shell小脚本。
#! /bin/bash
# Author : 蛙鳜鸡鹳狸猿
# create : 2016年 12月 19日 星期一 21:24:21 CST
# program : process of second level crontab to script
# crontab : NULL
#
#
# way 1
# for (( i=0; i<i+1; i++ ))
# do
# echo "@ $(date) I LOVE YOU" && sleep 1
# done
#
#
# way 2
# while true
# do
# echo "@ $(date) I LOVE YOU" && sleep 1
# done
#
#
# way 3
until false
do
echo "@ $(date) I LOVE YOU" && sleep 1
done
#
方法就是把命令放入一个条件永远满足或不满足的循环中每隔1秒执行一次。过程很简单!具体来说三种循环for、while和until都可以实现。这里也给出了三个脚本way 1,way 2和way 3。建议的话是用第三种,即没有注掉的way 3。第一种既要维持一个i计数器,同时也要做大小比较。第二种和第三种其实是一样的,区别在于第三种理解起来更粗暴,“一直do …… 直到 …… done”,适合于我们这个粗暴的环境。示例中是直到 “false” 否则每秒钟输出当前系统时间加上“I LOVE YOU”。LOVE个鬼,具体用的时候换成其他命令就行了,隔多少秒执行一次就改一下sleep参数。将其写入脚本执行后,就相当于实现了秒级别的定时任务crontab了!