在日常运维工作中, 经常会碰到以秒为单位去定时执行某些命令或监控脚本的需求。 说到定时任务就要用到crontab,通常来说,crontab的最小单位是分钟级别,要想实现秒级别的定时任务,就要进行特殊设置了。

测试:每隔2秒钟向/root/test.log文件输入"beijing is so good!", 下面介绍三种方法来实现秒级别的定时任务执行:

 第一种方法                                                       

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
写一个触发的脚本,在触发脚本中使用死循环来解决此问题
[root@test ~]# cat kevin.sh
#!/bin/bash
while : ;do
 
echo "beijing is so good!" >> /root/test.log
sleep 2
 
done
 
[root@test ~]# chmod 755 kevin.sh
 
可以把它放到计划任务使其运行
[root@test ~]# crontab -e
* * * * * /bin/bash -x /root/kevin.sh >/dev/null 2>&1
 
等待这个计划任务执行后,就将计划任务中的此条目删除或注释!防止该计划条目无限制地执行下去(只需执行一次就可以,因为kevin.sh脚本里本身就有死循环)
[root@test ~]# ps -ef|grep kevin.sh
root     29839 29835  0 16:05 ?        00:00:00 /bin/sh -c /bin/bash -x /root/kevin.sh >/dev/null 2>&1
root     29842 29839  0 16:05 ?        00:00:00 /bin/bash -x /root/kevin.sh
root     29852 16356  0 16:05 pts/0    00:00:00 grep kevin.sh
 
[root@test ~]# crontab -e
#* * * * * /bin/bash -x /root/kevin.sh >/dev/null 2>&1
 
最后把这个脚本放到 /etc/rc.local 让它每次开机都可以被运行
[root@test ~]# vim /etc/rc.local
/bin/bash -x /root/kevin.sh >/dev/null 2>&1
 
验证(查看是不是每隔2秒在/root/test.log文件中写入了)
[root@test ~]# tail -f /root/test.log
beijing is so good!
beijing is so good!
beijing is so good!
beijing is so good!
beijing is so good!
beijing is so good!
beijing is so good!
.........
.........
 
========================================================================================================================
温馨提示:
上面的kevin.sh脚本在第一次运行时千万不要执行"nohup /bin/bash /root/kevin.sh &", 即不要以这种方式放在后台执行, 否则会僵死!增加系统负载!!
 
例如很早之前用来监控sftp高可用中vip资源(172.16.51.193)的脚本,实时执行!
参考:https://www.cnblogs.com/kevingrace/p/7868049.html
 
1)第一台机器sftp-node01的操作 (172.16.51.191)
[root@sftp-node01 ~]# cat /data/script/sftp_vip_monit.sh
#!/bin/bash
while [ "1" = "1" ]
do
  NUM=`ip addr|grep 172.16.51.193|wc -l`
  if [ $NUM -eq 0 ];then
     echo "vip is not at this server" >/dev/null 2>&1
  fi
  
  if [ $NUM -eq 1 ];then
     /usr/bin/rsync -e "ssh -p22" -avpgolr --progress --delete-before /data/sftp/mysftp/ root@172.16.51.192:/data/sftp/mysftp/
  fi
  
done
  
[root@sftp-node01 ~]# chmod 755 /data/script/sftp_vip_monit.sh
[root@sftp-node01 ~]# nohup sh /data/script/sftp_vip_monit.sh &      //按ctrl+c结束
[root@sftp-node01 ~]# ps -ef|grep monit
root     10581 22167  0 19:42 pts/0    00:00:00 grep monit
root     15113     1  8 17:15 ?        00:13:00 sh sftp_vip_monit.sh
  
2)第二台机器sftp-node02 (172.16.51.192)
[root@sftp-node02 ~]# cat /data/script/sftp_vip_monit.sh
#!/bin/bash
while [ "1" = "1" ]
do
  NUM=`ip addr|grep 172.16.51.193|wc -l`
  if [ $NUM -eq 0 ];then
     echo "vip is not at this server" >/dev/null 2>&1
  fi
  
  if [ $NUM -eq 1 ];then
     /usr/bin/rsync -e "ssh -p22" -avpgolr --progress --delete-before /data/sftp/mysftp/ root@172.16.51.191:/data/sftp/mysftp/
  fi
  
done
  
[root@sftp-node02 ~]# chmod 755 /data/script/sftp_vip_monit.sh
[root@sftp-node02 ~]# nohup sh /data/script/sftp_vip_monit.sh &      //按ctrl+c结束
[root@sftp-node02 ~]# ps -ef|grep monit
root     10581 22167  0 19:42 pts/0    00:00:00 grep monit
root     15113     1  8 17:15 ?        00:13:00 sh sftp_vip_monit.sh
 
这种操作方式,虽然可以实现实时执行,但可能会造成僵死,加大系统负载!
可以参考上面第一种方式那样进行调整,实现每1秒钟来执行这个监控脚本!

 第二种方法                                                     
和第一种方法类似,只不过感觉比第一种更便捷一些。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
[root@test ~]# vim kevin.sh
#!/bin/bash
 
for((i=1;i<=20;i++));do
 
echo "beijing is so good!" >> /root/test.log
sleep 2
 
done
 
然后添加脚本执行权限, 写入的crontab里每分钟执行一次
[root@test ~]# chmod 755 kevin.sh
[root@test ~]# crontab -e
* * * * * /bin/bash -x /root/kevin.sh >/dev/null 2>&1
 
[root@test ~]# ps -ef|grep kevin.sh
root     30515 30514  0 16:27 ?        00:00:00 /bin/sh -c /bin/bash -x /root/kevin.sh >/dev/null 2>&1
root     30516 30515  0 16:27 ?        00:00:00 /bin/bash -x /root/kevin.sh
root     30527 16356  0 16:27 pts/0    00:00:00 grep kevin.sh
 
[root@test ~]# tail -f /root/test.log
beijing is so good!
beijing is so good!
beijing is so good!
beijing is so good!
beijing is so good!
beijing is so good!
........

第三种方法                                                   

使用crontab计划任务来直接实现!经验证,这种方式是最靠谱,最稳妥的!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
[root@test ~]# cat /root/kevin.sh
#!/bin/bash
echo "beijing is so good!" >> /root/test.log
 
添加脚本执行权限,并配置到crontab计划任务里(使用&& 或者 ;都是一样的效果)。思路:先过一分钟执行第一次,接着就是每隔2秒钟执行一次。
[root@test ~]# chmod 755 /root/kevin.sh
[root@test ~]# crontab -e
* * * * * /bin/bash -x /root/kevin.sh >/dev/null 2>&1
* * * * * sleep 2 &&  /bin/bash -x /root/kevin.sh >/dev/null 2>&1
* * * * * sleep 4; /bin/bash -x /root/kevin.sh >/dev/null 2>&1
* * * * * sleep 6; /bin/bash -x /root/kevin.sh >/dev/null 2>&1
* * * * * sleep 8; /bin/bash -x /root/kevin.sh >/dev/null 2>&1
* * * * * sleep 10; /bin/bash -x /root/kevin.sh >/dev/null 2>&1
* * * * * sleep 12; /bin/bash -x /root/kevin.sh >/dev/null 2>&1
* * * * * sleep 14; /bin/bash -x /root/kevin.sh >/dev/null 2>&1
* * * * * sleep 16; /bin/bash -x /root/kevin.sh >/dev/null 2>&1
* * * * * sleep 18; /bin/bash -x /root/kevin.sh >/dev/null 2>&1
* * * * * sleep 20; /bin/bash -x /root/kevin.sh >/dev/null 2>&1
* * * * * sleep 22; /bin/bash -x /root/kevin.sh >/dev/null 2>&1
* * * * * sleep 24; /bin/bash -x /root/kevin.sh >/dev/null 2>&1
* * * * * sleep 26; /bin/bash -x /root/kevin.sh >/dev/null 2>&1
* * * * * sleep 28; /bin/bash -x /root/kevin.sh >/dev/null 2>&1
* * * * * sleep 30; /bin/bash -x /root/kevin.sh >/dev/null 2>&1
* * * * * sleep 32; /bin/bash -x /root/kevin.sh >/dev/null 2>&1
* * * * * sleep 34; /bin/bash -x /root/kevin.sh >/dev/null 2>&1
* * * * * sleep 36; /bin/bash -x /root/kevin.sh >/dev/null 2>&1
* * * * * sleep 38; /bin/bash -x /root/kevin.sh >/dev/null 2>&1
* * * * * sleep 40; /bin/bash -x /root/kevin.sh >/dev/null 2>&1
* * * * * sleep 42; /bin/bash -x /root/kevin.sh >/dev/null 2>&1
* * * * * sleep 44; /bin/bash -x /root/kevin.sh >/dev/null 2>&1
* * * * * sleep 46; /bin/bash -x /root/kevin.sh >/dev/null 2>&1
* * * * * sleep 48; /bin/bash -x /root/kevin.sh >/dev/null 2>&1
* * * * * sleep 50; /bin/bash -x /root/kevin.sh >/dev/null 2>&1
* * * * * sleep 52; /bin/bash -x /root/kevin.sh >/dev/null 2>&1
* * * * * sleep 54; /bin/bash -x /root/kevin.sh >/dev/null 2>&1
* * * * * sleep 56; /bin/bash -x /root/kevin.sh >/dev/null 2>&1
* * * * * sleep 58; /bin/bash -x /root/kevin.sh >/dev/null 2>&1
 
[root@test ~]# tail -f /root/test.log
beijing is so good!
beijing is so good!
beijing is so good!
beijing is so good!
beijing is so good!
beijing is so good!
beijing is so good!
beijing is so good!
beijing is so good!
..........
..........

上面介绍的三种方法,比较倾向于推荐第三种方法,因为前两种方法并不是严格的间隔2秒执行的,可能会大于2秒,因为执行脚本(kevin.sh)本身也是需要一定时间的。如果对于精确度要求不高,推荐使用第二种方法。

转自

Linux下间隔多少秒 (即以秒为单位) 去执行某条命令或某个shell脚本的操作方法 - 散尽浮华 - 博客园 https://www.cnblogs.com/kevingrace/p/10220837.html

Linux下间隔多少秒 (即以秒为单位) 去执行某条命令或某个shell脚本的操作方法【转】的更多相关文章

  1. Linux centosVMware shell脚本介绍、shell脚本结构和执行、date命令用法、shell脚本中的变量

    一. shell脚本介绍 shell是一种脚本语言 aming_linux blog.lishiming.net 可以使用逻辑判断.循环等语法 可以自定义函数 shell是系统命令的集合 shell脚 ...

  2. (转载)linux下tar.gz、tar、bz2、zip等解压缩、压缩命令小结

    linux下tar.gz.tar.bz2.zip等解压缩.压缩命令小结 bz2 tgz z等众多压缩文件的压缩与解压方法,需要的朋友可以参考下 1) Linux下最常用的打包程序就是tar了,使用ta ...

  3. linux下获取占用CPU资源最多的10个进程,可以使用如下命令组合:

    linux下获取占用CPU资源最多的10个进程,可以使用如下命令组合: ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head linux下获取占用 ...

  4. [教程]K8Cscan调用外部程序(Win/Linux批量上控/执行多条命令/保存结果)

    0x000 调用原理 Cscan调用外部程序有两种方式,一是编写DLL,二是配置文件 编写DLL文件对于不懂编程的人来说可能会很难(虽然支持各语言) 由于考虑到很多人不会编程或会编程又急用无法短时间转 ...

  5. linux系统执行多条命令,linux系统执行复合命令

    在操作linux系统的时候,你是否遇到过打开一个目录,然后查看一个文件里面的内容. 我们可以使用命令   cd + 目录     cat + 文件名,我们需要输入两次,点击两次 enter   有没有 ...

  6. 《Linux命令行与shell脚本编程大全》 第二十二章 学习笔记

    第二十二章:使用其他shell 什么是dash shell Debian的dash shell是ash shell的直系后代,ash shell是Unix系统上原来地Bourne shell的简化版本 ...

  7. Linux重复执行上条命令

    Linux系统下Shell重复执行上条命令的 4 种方法: 1.使用上方向键,并回车执行.2.按 !! 并回车执行.3.输入 !-1 并回车执行.4.按 Ctrl+P 并回车执行.

  8. 《Linux命令行与shell脚本编程大全》 第六章环境变量

    很多程序和脚本都通过环境变量来获取系统信息.存储临时数据和配置信息. 6.1 什么是环境变量: bash shell用一个叫环境变量(environment variable)的特性来存储有关shel ...

  9. 《Linux命令行与shell脚本编程大全》第二十一章 sed进阶

    本章介绍一些sed编辑器提供的高级特性. 21.1 多行命令 按照之前的知识,所有的sed编辑器命令都是针对单行数据执行操作的. 在sed编辑器读取数据流时,它会基于换行符的位置将数据分成行,一次处理 ...

随机推荐

  1. iis+nginx实现负载均衡

    简要说明:nginx的简介自行百度. 目的:把用户的请求分到各个服务器减轻压力.nginx把监听的端口的请求平均转到布署了网站的服务器. 一.windows上安装nginx 1.官网下载windows ...

  2. codeforces#1136 C. Nastya Is Transposing Matrices(找规律)

    题意:给出两个n*m的矩阵,每次操作可以让一个正方形矩阵行列交换.问,在无限次操作下,第一个矩阵能否变成第二个矩阵 分析:先把操作限定在2*2的矩阵中.这样对角线上的元素就可以随意交换.也就是说,如果 ...

  3. Java中NIO和IO区别和适用场景

    NIO是为了弥补IO操作的不足而诞生的,NIO的一些新特性有:非阻塞I/O,选择器,缓冲以及管道.管道(Channel),缓冲(Buffer) ,选择器( Selector)是其主要特征. 概念解释: ...

  4. 其他综合-fdisk一键分区操作-无需脚本

    fdisk一键操作分区-无需脚本(根据自己的实际环境操作) 为了让在系统里能够显示新添加的硬盘已知有两种操作方法 : 1.重启 2.输入echo "- - -" > /sys ...

  5. Java多线程9:中断机制

    一.概述 之前讲解Thread类中方法的时候,interrupt().interrupted().isInterrupted()三个方法没有讲得很清楚,只是提了一下.现在把这三个方法同一放到这里来讲, ...

  6. QTP自动化测试-打开运行报告

    automation菜单下-点击 result

  7. 关于Qt的StyleSheet作用范围

    Qt的StyleSheet是很方便的一个设置各种控件风格形态的属性,但是默认的StyleSheet会作用于所有的子控件,容易带来麻烦,以下几种情况,可以限制作用范围 以QTextEdit为例,实体名为 ...

  8. vue常用手册

    1.搭建vue的开发环境: 1.必须要安装node.js 2.安装vue的脚手架工具 官方命令行工具 npm install --global vue-cli 3.新建项目 vue init webp ...

  9. 第十九节、基于传统图像处理的目标检测与识别(词袋模型BOW+SVM附代码)

    在上一节.我们已经介绍了使用HOG和SVM实现目标检测和识别,这一节我们将介绍使用词袋模型BOW和SVM实现目标检测和识别. 一 词袋介绍 词袋模型(Bag-Of-Word)的概念最初不是针对计算机视 ...

  10. Dubbo2.6.5+Nacos注册中心(代替Zookeeper)

    在上一节的小栗子的基础上,只需要更改两个地方 第一个:父工程的pom依赖增加 <!-- Dubbo Nacos registry dependency --> <dependency ...