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编辑器读取数据流时,它会基于换行符的位置将数据分成行,一次处理 ...
随机推荐
- Spring AOP前置通知实例说明AOP相关概念
今天又看了下韩顺平的SpringAOP的讲解,讲解的很透彻.仿照视频自己使用下前置通知. 一.引出问题 有个接口TestServiceInter,有两个实现方法TestService和Test2Ser ...
- 2019年美国大学生数学建模竞赛(MCM/ICM) E题解题思路
这也许是我大学生涯最后一次参加数学建模比赛了吧,这次我们选择的问题是E题,以下是我们解题时候的一些思路.很多不易体现的项目产生对环境造成影响的指标可以由一些等同类型的指标来代替,如土地.森林植被被破环 ...
- linux测速工具 speedtest-cli
安装speedtest-cli: wget -O speedtest-cli https://raw.githubusercontent.com/sivel/speedtest-cli/master/ ...
- js 实现各浏览器全屏
现代浏览器包括ie11,可以直接用h5的全屏api实现 低版本的IE需要通过ActiveX插件实现: 代码实现 <!DOCTYPE html> <html> <head& ...
- JDK环境配置(Windows)
JDK环境配置(Windows): 1.下载jdk版本: https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads ...
- Linux(Ubuntu)使用日记(七)------终端控制器Terminator安装使用
1.目的 实现分屏效果,如图: 如果使用系统自带的终端,可能会使这种效果: 综上所述,知道我们为什么要安装Terminator了吧. 2.安装过程 Terminator 的安装非常方便,在 Ubunt ...
- Platform.Uno介绍
编者语:Xamarin国内很多人说缺乏可用的实例,我在写书过程中在完善一些常用场景的例子,希望帮到大家.Build 2018结束一周了,善友问我要不要谈谈Xamarin的一些变化,但碍于时间有限一直没 ...
- [模板] 最近公共祖先/lca
简介 最近公共祖先 \(lca(a,b)\) 指的是a到根的路径和b到n的路径的深度最大的公共点. 定理. 以 \(r\) 为根的树上的路径 \((a,b) = (r,a) + (r,b) - 2 * ...
- 为什么会有这么多python?其实python并不是编程语言!
Python是出类拔萃的 然而,这是一句非常模棱两可的话.这里的"Python"到底指的是什么? 是Python的抽象接口吗?是Python的通用实现CPython吗(不要把CPy ...
- Null component Catalina
"严重: Null component Catalina:type=JspMonitor,name=jsp,WebModule="错误的解决办法 在MyEclipse10环境下启动 ...