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编辑器读取数据流时,它会基于换行符的位置将数据分成行,一次处理 ...
随机推荐
- 领域驱动设计系列文章(2)——浅析VO、DTO、DO、PO的概念、区别和用处
本篇文章主要讨论一下我们经常会用到的一些对象:VO.DTO.DO和PO. 由于不同的项目和开发人员有不同的命名习惯,这里我首先对上述的概念进行一个简单描述,名字只是个标识,我们重点关注其概念: 概念: ...
- 从HTTL模板引擎看软件设计原则
HTTL (Hyper-Text Template Language) 是一个高性能的开源JAVA模板引擎, 适用于动态HTML页面输出, 可替代JSP页面, 指令和Velocity相似.作者是阿里巴 ...
- springdata 使用plql更新时候注意点 ?2 表示从方法中获取第二个形参的值 ?1表示从方法中获取第一个值
1.query表示的是查询 需要在操作update的方法上再次添加一个注解modifying 2.plql不是springdatajpa自带的sql功能自带的功能 自动有事务: 所以需要我们手动在se ...
- codeforces645B
Mischievous Mess Makers CodeForces - 645B It is a balmy spring afternoon, and Farmer John's n cows a ...
- http请求contentype详解
请求头 在http请求头中有一项重要的参数就是contentype,用来告诉浏览器,我服务器传送过来的数据是什么格式,这样浏览器才知道怎么去解析服务器传过来的数据 urlencoded 通常我们for ...
- 平衡树splay学习笔记#1
这一篇博客只讲splay的前一部分的操作(rotate和splay),后面的一段博客咕咕一段时间 后一半的博客地址:[传送门] 前言骚话 为了学lct我也是拼了,看了十几篇博客,学了将近有一周,才A掉 ...
- BM算法学习笔记
一种nb算法,可以求出数列的递推式. 具体过程是这样的. 我们先假设它有一个递推式,然后按位去算他的值. ;j<now.size();++j)(delta[i]+=1ll*now[j]*f[i- ...
- Prometheus监控elasticsearch集群(以elasticsearch-6.4.2版本为例)
部署elasticsearch集群,配置文件可"浓缩"为以下: cluster.name: es_cluster node.name: node1 path.data: /app/ ...
- Java8之方法引用
一.概述 在学习lambda表达式之后,我们通常使用lambda表达式来创建匿名方法.然而,有时候我们仅仅是调用了一个已存在的方法.如下: Arrays.sort(stringsArray,(s1,s ...
- windows下用pycharm安装tensorflow简易教程
https://blog.csdn.net/heros_never_die/article/details/79760616 最近开始学习深度学习的相关知识,准备实战一下,看了一些关于tensorfl ...