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@eg0 mnt]# crontab -l
* * * * *  date>>/mnt/file

这是每一分钟执行一次计划任务。接下来进入正题,看如何实现每秒执行一次的计划任务:

先来看下每10秒执行一次的实现方法:

[root@eg0 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@eg0 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
Wed Nov 29 07:46:31 EST 2017
Wed Nov 29 07:46:41 EST 2017
Wed Nov 29 07:46:51 EST 2017
Wed Nov 29 07:47:01 EST 2017
Wed Nov 29 07:47:11 EST 2017
Wed Nov 29 07:47:21 EST 2017
Wed Nov 29 07:47:31 EST 2017
Wed Nov 29 07:47:41 EST 2017
Wed Nov 29 07:47:51 EST 2017
Wed Nov 29 07:48:01 EST 2017

用sleep10 表示休眠10s,
这样写就实现了每10秒执行一次,用了5个计划任务。如果要实现每5秒,甚至是每1秒执行一次,就要写59行计划任务了,显然太繁琐,可以用一个脚本的方式实现:

[root@eg0 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@eg0 mnt]# chmod +x test.sh
[root@eg0 mnt]# crontab -e
* * * * *   sh /mnt/date.sh

结果是:

[root@eg0 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
Wed Nov 29 08:06:06 EST 2017
Wed Nov 29 08:06:07 EST 2017
Wed Nov 29 08:06:08 EST 2017
Wed Nov 29 08:06:09 EST 2017
Wed Nov 29 08:06:10 EST 2017
Wed Nov 29 08:06:11 EST 2017
Wed Nov 29 08:06:12 EST 2017
Wed Nov 29 08:06:13 EST 2017
Wed Nov 29 08:06:14 EST 2017
Wed Nov 29 08:06:15 EST 2017
Wed Nov 29 08:06:16 EST 2017
Wed Nov 29 08:06:17 EST 2017
Wed Nov 29 08:06:18 EST 2017
Wed Nov 29 08:06:19 EST 2017
Wed Nov 29 08:06:20 EST 2017
Wed Nov 29 08:06:21 EST 2017
Wed Nov 29 08:06:22 EST 2017
Wed Nov 29 08:06:23 EST 2017
Wed Nov 29 08:06:24 EST 2017
Wed Nov 29 08:06:25 EST 2017
Wed Nov 29 08:06:26 EST 2017
Wed Nov 29 08:06:27 EST 2017
Wed Nov 29 08:06:28 EST 2017
Wed Nov 29 08:06:29 EST 2017
Wed Nov 29 08:06:30 EST 2017
Wed Nov 29 08:06:31 EST 2017
Wed Nov 29 08:06:32 EST 2017
Wed Nov 29 08:06:33 EST 2017
Wed Nov 29 08:06:34 EST 2017
Wed Nov 29 08:06:35 EST 2017
Wed Nov 29 08:06:36 EST 2017
Wed Nov 29 08:06:37 EST 2017
Wed Nov 29 08:06:38 EST 2017
Wed Nov 29 08:06:39 EST 2017
Wed Nov 29 08:06:40 EST 2017
Wed Nov 29 08:06:41 EST 2017
Wed Nov 29 08:06:42 EST 2017
Wed Nov 29 08:06:43 EST 2017
Wed Nov 29 08:06:44 EST 2017
Wed Nov 29 08:06:45 EST 2017
Wed Nov 29 08:06:46 EST 2017
Wed Nov 29 08:06:47 EST 2017
Wed Nov 29 08:06:48 EST 2017
Wed Nov 29 08:06:49 EST 2017
Wed Nov 29 08:06:50 EST 2017
Wed Nov 29 08:06:51 EST 2017
Wed Nov 29 08:06:52 EST 2017
Wed Nov 29 08:06:53 EST 2017
Wed Nov 29 08:06:54 EST 2017
Wed Nov 29 08:06:55 EST 2017
Wed Nov 29 08:06:56 EST 2017
Wed Nov 29 08:06:57 EST 2017
Wed Nov 29 08:06:58 EST 2017
Wed Nov 29 08:06:59 EST 2017
Wed Nov 29 08:07:00 EST 2017
Wed Nov 29 08:07:01 EST 2017
Wed Nov 29 08:07:01 EST 2017
Wed Nov 29 08:07:02 EST 2017
Wed Nov 29 08:07:03 EST 2017

可以看到结果是每一秒都将date的结果导入到了指定的文件,这样就实现了每秒执行一次了。

你可能感兴趣的:(crontab,脚本)