crontab实现秒级计划任务

打开crontab的配置文件:
[root@localhost ~]# cat /etc/crontab

# Example of job definition:
# .---------------- 分钟(0 - 59)
# | .------------- 小时 (0 - 23)
# | | .---------- 一月中的哪一天 (1 - 31)
# | | | .------- 月份 (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- 星期 (0 - 6) (Sunday=0 or 7) OR sun,mon...
# | | | | |
# * * * * * 用户 命令(或者脚本)
可以看到,他的5颗星分别代表 分钟、小时、天、星期、月份
那么可以实现的最小时间单位是分钟,想要实现秒级的计划任就需要另外做些处理:
我们要看到秒级的执行情况,需要借用一个date命令,这一样可以很好的看到结果。
每分钟将date输出的内容导入到/mnt/file的计划任务是:
[root@xen mnt]# crontab -l

          • date>>/mnt/file
            1
            2
            这是每一分钟执行一次计划任务。接下来进入正题,看如何实现每秒执行一次的计划任务:
            先来看下每10秒执行一次的实现方法:
            [root@xen mnt]# crontab -l
          • sleep 10; date>>/mnt/file
          • sleep 20; date>>/mnt/file
          • sleep 30; date>>/mnt/file
          • sleep 40; date>>/mnt/file
          • sleep 50; date>>/mnt/file

[root@xen mnt]# cat /mnt/file
Wed Nov 29 07:46:01 EST 2017
Wed Nov 29 07:46:11 EST 2017
Wed Nov 29 07:46:21 EST 2017
用sleep10 表示休眠10s,
这样写就实现了每10秒执行一次,用了5个计划任务。如果要实现每5秒,甚至是每1秒执行一次,就要写59行计划任务了,显然太繁琐,可以用一个脚本的方式实现:

[root@xen mnt]# vim test.sh
#!/bin/bash
step=1 #间隔的秒数,不能大于60
for ((i=0;i<60;i=(i+step)));do
$(date>>/mnt/file)
sleep $step
done
exit 0
[root@xen mnt]# chmod +x test.sh
[root@xen mnt]# crontab -e

          • sh /mnt/date.sh
            结果是:

[root@xen mnt]# cat file
Wed Nov 29 08:06:02 EST 2017
Wed Nov 29 08:06:03 EST 2017
Wed Nov 29 08:06:04 EST 2017
Wed Nov 29 08:06:05 EST 2017
可以看到结果是每一秒都将date的结果导入到了指定的文件,这样就实现了每秒执行一次了。

你可能感兴趣的:(crontab实现秒级计划任务)