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编辑器读取数据流时,它会基于换行符的位置将数据分成行,一次处理 ...
随机推荐
- python 角度和弧度转化
>>> import math >>> math.degrees(math.pi/) 90.0 >>> math.radians() 1.5707 ...
- SkylineGlobe 7.0.1 & 7.0.2版本Web开发 如何正确使用三维地图控件和工程树控件
Skyline TerraExplorer Pro目前正式发布的7.0.1&7.0.2版本,还只是64位的版本, 在Web开发的时候,如何在页面中正确嵌入三维地图控件,让一些小伙伴凌乱了. 下 ...
- odoo11 访问MSQL Server等第三发数据源
odoo框架默认的访问时Postgres数据库,但在实际的应用场景中,不可避免的使用到其他数据库,所以有必要研究如何连接其他第三方数据库,这里分享下OCA的相关模块,具体的源代码在这里. 我将第三方的 ...
- 类别不平衡问题和Softmax回归
目录 类别不平衡(class-imbalance) Softmax回归模型 类别不平衡(class-imbalance) 当不同类别的训练样本数目差别很大,则会对学习过程造成困扰.如有998个反例,但 ...
- Python的dnspython库使用指南
因为平时在测试DNS的时候有些操作手动完成不方便,所以需要用到脚本,而在Python里dnspython这个用于DNS操作的库十分强大,但是无奈网上大部分资料只列举了少部分的用法,所以记录一下我平时使 ...
- BugPhobia开发篇章:Beta阶段第X次Scrum Meeting
0x01 :Scrum Meeting基本摘要 Beta阶段第十次Scrum Meeting 敏捷开发起始时间 2015/12/29 00:00 A.M. 敏捷开发终止时间 2016/01/01 23 ...
- nginx中的epoll模型
要了解epoll模型,就要一个一个知识点由浅至深地去探索. 1.IO复用技术 IO流请求操作系统内核,有串行处理和并行处理两种概念. 串行处理是前面一个操作处理地时候,后面的所有操作都需要等待.因此, ...
- JVM内存区域详解
本文分为两部分:一是JVM内存区域的讲解:二是常见的内存溢出异常分析. 1.JVM内存区域 java虚拟机在执行java程序的过程中会把它管理的内存划分为若干个不同的数据区域,这些区域都有各自的用途, ...
- poj3436(拆点最大流)
题意:给你p和n,p代表每台计算器需要几个部分组成,n代表有几个组装机器,接下来n行,每行第一个数代表这台机器能够每小时组装几台,剩下前三个数字表示使用这台机器需要的前置条件(0代表当前组装不能有这个 ...
- adb调试
adb usb调试,adb网络调试是非常实用的工具,通过电脑连接手机达到文件传输.电脑端安装app刷机等功能材料: 材料: 1.电脑端安装号对应手机的驱动程序 2.电脑端下载好adb调试工具 3.手机 ...