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/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脚本的操作方法【转】的更多相关文章
- 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编辑器读取数据流时,它会基于换行符的位置将数据分成行,一次处理 ...
随机推荐
- CentOS7.4使用KVM
参考地址 [root@node1 ~]# cat /etc/centos-release CentOS Linux release 7.4.1708 (Core) [root@node1 ~]# un ...
- vue slot插槽的使用
slot插槽的使用场景 父组件向子组件传递dom时会用到插槽 作用域插槽:当同一个子组件想要在不同的父组件里展示不同的状态,可以使用作用域插槽.展示的状态由父组件来决定 注:想要修改父组件向子 ...
- Gerrit 添加用户
使用ssh添加用户 ssh name@localhost -p 29418 gerrit create-account username --email username@email --full-n ...
- 【Swift 3.1】iOS开发笔记(四)
一.唱片旋转效果(360°无限顺时针旋转) func animationRotateCover() { coverImageView.layer.removeAllAnimations() let a ...
- HashMap底层
写在前面: 频繁用到 hashcode() 和 equals() put(key, value): 先计算 key 的hashcode, 找到对应的bucket,如果这个bucket上面已有key-v ...
- PHP之提升代码质量36计
转载:https://www.binarytides.com/35-techniques-to-enhance-your-php-code/ 1.不要使用相对路径 常常会看到: require_onc ...
- h5-canvas 单像素操作
###1. 自定义获取指定坐标像素 var canvas = document.querySelector("#cav"); if(canvas.getContext){ var ...
- SVN Error:Error performing cleanup for
这个错误,是由于我误删了lib中的jar导致的 一 首先,下载 sqlite3 然后把sqlite3.exe 放到项目文件夹中的.svn文件夹. 如下: 二 接着运行cmd 转到.svn下 三 输入 ...
- wiki
GRANT ALL PRIVILEGES ON confluence.* TO 'confluence'@'localhost' IDENTIFIED BY '%SaRK%TDpU#CyT6i';
- Java8学习笔记(一)--Lambda表达式
两个概念 函数式接口 函数式接口就是只显式声明一个抽象方法的接口.为保证方法数量不多不少,java8提供了一个专用注解@FunctionalInterface,这样,当接口中声明的抽象方法多于或少于一 ...