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编辑器读取数据流时,它会基于换行符的位置将数据分成行,一次处理 ...
随机推荐
- 一款DMA性能优化记录:异步传输和指定实时信号做async IO
关键词:DMA.sync.async.SIGIO.F_SETSIG. DMA本身用于减轻CPU负担,进行CPU off-load搬运工作. 在DMA驱动内部实现有同步和异步模式,异步模式使用dma_a ...
- HNOI2019:My Dream
反正这次的目标也不是进省队,目标就是做到最好吧-- 下面都是流水账~ Day -INF ~ Day -3 专题交流没什么好说的,模拟赛详见3.11-3.27省选前多校联考乱记和3.28-4.2CJ大毒 ...
- Framework7 索引列表插件的异步加载实现
前言 Framework7 作为移动端的开发框架的优良之处已经无需多言.现在已经有了 React 和 Vue 版本,之前在项目中用过 F7 + vue 的开发方式,无论是效率还是产出都近乎完美.有时间 ...
- myBatista批量查询和插入
<select id="queryCompanyByDistrict" resultType="WyCompany"> SELECT * FROM ...
- mybatis的where和if标签配合使用
where标签用于简化sql的书写,if标签用于判断.大概的使用如下 <select id="getCountByPageInfo" parameterType=" ...
- webpack4
本地安装: npm init -y cnpm install webpack webpack-cli webpack-dev-server --save-dev 然后装一些所需要的loader和插件: ...
- IdentityServer4【Topic】Consent
Conset这个概念在Identityserver4中是表示要当前用户对第三方应用对资源请求的一个确认,它会被做成一个页面. 术语映射: Consent page--确认页面,我喜欢叫做Consent ...
- css实现多行文本溢出显示省略号(…)
WebKit浏览器或移动端的页面在WebKit浏览器或移动端(绝大部分是WebKit内核的浏览器)的页面实现比较简单,可以直接使用WebKit的CSS扩展属性(WebKit是私有属性)-webkit- ...
- URL https://i.cnblogs.com/EditPosts.aspx?opt=1
URL url = new URL("https://i.cnblogs.com");URL url1 = new URL(url, "EditPosts.aspx?op ...
- SpringMvc的自动装箱和GET请求参数可以为自定义对象的思考
在我的概念里边,GET请求需要加上注解@RequestParam,然后它的参数类型只能是 基本数据类型 或者 基本数据类型的包装类,比如:@RequestParam String name(默认是必传 ...