Linux下间隔多少秒 (即以秒为单位) 去执行某条命令或某个shell脚本的操作方法【转】
在日常运维工作中, 经常会碰到以秒为单位去定时执行某些命令或监控脚本的需求。 说到定时任务就要用到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/bashwhile : ;doecho "beijing is so good!" >> /root/test.logsleep 2done[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.shroot 29839 29835 0 16:05 ? 00:00:00 /bin/sh -c /bin/bash -x /root/kevin.sh >/dev/null 2>&1root 29842 29839 0 16:05 ? 00:00:00 /bin/bash -x /root/kevin.shroot 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.html1)第一台机器sftp-node01的操作 (172.16.51.191)[root@sftp-node01 ~]# cat /data/script/sftp_vip_monit.sh#!/bin/bashwhile [ "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 monitroot 10581 22167 0 19:42 pts/0 00:00:00 grep monitroot 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/bashwhile [ "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 monitroot 10581 22167 0 19:42 pts/0 00:00:00 grep monitroot 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/bashfor((i=1;i<=20;i++));doecho "beijing is so good!" >> /root/test.logsleep 2done然后添加脚本执行权限, 写入的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.shroot 30515 30514 0 16:27 ? 00:00:00 /bin/sh -c /bin/bash -x /root/kevin.sh >/dev/null 2>&1root 30516 30515 0 16:27 ? 00:00:00 /bin/bash -x /root/kevin.shroot 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/bashecho "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.logbeijing 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脚本的操作方法【转】的更多相关文章
- Linux centosVMware shell脚本介绍、shell脚本结构和执行、date命令用法、shell脚本中的变量
一. shell脚本介绍 shell是一种脚本语言 aming_linux blog.lishiming.net 可以使用逻辑判断.循环等语法 可以自定义函数 shell是系统命令的集合 shell脚 ...
- (转载)linux下tar.gz、tar、bz2、zip等解压缩、压缩命令小结
linux下tar.gz.tar.bz2.zip等解压缩.压缩命令小结 bz2 tgz z等众多压缩文件的压缩与解压方法,需要的朋友可以参考下 1) Linux下最常用的打包程序就是tar了,使用ta ...
- linux下获取占用CPU资源最多的10个进程,可以使用如下命令组合:
linux下获取占用CPU资源最多的10个进程,可以使用如下命令组合: ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head linux下获取占用 ...
- [教程]K8Cscan调用外部程序(Win/Linux批量上控/执行多条命令/保存结果)
0x000 调用原理 Cscan调用外部程序有两种方式,一是编写DLL,二是配置文件 编写DLL文件对于不懂编程的人来说可能会很难(虽然支持各语言) 由于考虑到很多人不会编程或会编程又急用无法短时间转 ...
- linux系统执行多条命令,linux系统执行复合命令
在操作linux系统的时候,你是否遇到过打开一个目录,然后查看一个文件里面的内容. 我们可以使用命令 cd + 目录 cat + 文件名,我们需要输入两次,点击两次 enter 有没有 ...
- 《Linux命令行与shell脚本编程大全》 第二十二章 学习笔记
第二十二章:使用其他shell 什么是dash shell Debian的dash shell是ash shell的直系后代,ash shell是Unix系统上原来地Bourne shell的简化版本 ...
- Linux重复执行上条命令
Linux系统下Shell重复执行上条命令的 4 种方法: 1.使用上方向键,并回车执行.2.按 !! 并回车执行.3.输入 !-1 并回车执行.4.按 Ctrl+P 并回车执行.
- 《Linux命令行与shell脚本编程大全》 第六章环境变量
很多程序和脚本都通过环境变量来获取系统信息.存储临时数据和配置信息. 6.1 什么是环境变量: bash shell用一个叫环境变量(environment variable)的特性来存储有关shel ...
- 《Linux命令行与shell脚本编程大全》第二十一章 sed进阶
本章介绍一些sed编辑器提供的高级特性. 21.1 多行命令 按照之前的知识,所有的sed编辑器命令都是针对单行数据执行操作的. 在sed编辑器读取数据流时,它会基于换行符的位置将数据分成行,一次处理 ...
随机推荐
- iis+nginx实现负载均衡
简要说明:nginx的简介自行百度. 目的:把用户的请求分到各个服务器减轻压力.nginx把监听的端口的请求平均转到布署了网站的服务器. 一.windows上安装nginx 1.官网下载windows ...
- codeforces#1136 C. Nastya Is Transposing Matrices(找规律)
题意:给出两个n*m的矩阵,每次操作可以让一个正方形矩阵行列交换.问,在无限次操作下,第一个矩阵能否变成第二个矩阵 分析:先把操作限定在2*2的矩阵中.这样对角线上的元素就可以随意交换.也就是说,如果 ...
- Java中NIO和IO区别和适用场景
NIO是为了弥补IO操作的不足而诞生的,NIO的一些新特性有:非阻塞I/O,选择器,缓冲以及管道.管道(Channel),缓冲(Buffer) ,选择器( Selector)是其主要特征. 概念解释: ...
- 其他综合-fdisk一键分区操作-无需脚本
fdisk一键操作分区-无需脚本(根据自己的实际环境操作) 为了让在系统里能够显示新添加的硬盘已知有两种操作方法 : 1.重启 2.输入echo "- - -" > /sys ...
- Java多线程9:中断机制
一.概述 之前讲解Thread类中方法的时候,interrupt().interrupted().isInterrupted()三个方法没有讲得很清楚,只是提了一下.现在把这三个方法同一放到这里来讲, ...
- QTP自动化测试-打开运行报告
automation菜单下-点击 result
- 关于Qt的StyleSheet作用范围
Qt的StyleSheet是很方便的一个设置各种控件风格形态的属性,但是默认的StyleSheet会作用于所有的子控件,容易带来麻烦,以下几种情况,可以限制作用范围 以QTextEdit为例,实体名为 ...
- vue常用手册
1.搭建vue的开发环境: 1.必须要安装node.js 2.安装vue的脚手架工具 官方命令行工具 npm install --global vue-cli 3.新建项目 vue init webp ...
- 第十九节、基于传统图像处理的目标检测与识别(词袋模型BOW+SVM附代码)
在上一节.我们已经介绍了使用HOG和SVM实现目标检测和识别,这一节我们将介绍使用词袋模型BOW和SVM实现目标检测和识别. 一 词袋介绍 词袋模型(Bag-Of-Word)的概念最初不是针对计算机视 ...
- Dubbo2.6.5+Nacos注册中心(代替Zookeeper)
在上一节的小栗子的基础上,只需要更改两个地方 第一个:父工程的pom依赖增加 <!-- Dubbo Nacos registry dependency --> <dependency ...