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编辑器读取数据流时,它会基于换行符的位置将数据分成行,一次处理 ...
随机推荐
- HTML页面全屏/退出全屏
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- jquery动态设置图片路径和超链接href属性
js document.getElementById("myImage").src="hackanm.gif"; jquery $("#img&quo ...
- Hadoop(五)搭建Hadoop客户端与Java访问HDFS集群
阅读目录(Content) 一.Hadoop客户端配置 二.Java访问HDFS集群 2.1.HDFS的Java访问接口 2.2.Java访问HDFS主要编程步骤 2.3.使用FileSystem A ...
- Python——逻辑运算(or,and)
print(0 and 2 > 1) #结果0 print(0 and 2 < 1) #结果0 print(1 and 2 > 1) #结果True print(1 and 2 &l ...
- 配置启动MySQL的Docker容器
docker run -d -p : --name mysql -e MYSQL_ROOT_PASSWORD= mysql:
- mac/Linux/centos ssh连接服务器以及跳板机,实现类型Xshell 功能
1. 由于之前一段时间,公司测试服务器需要有跳板机这种操作,由于mac机器上没有类似Xshell这种程序,所以,只能自己造轮子啦. 本程序采用Shell+Expect脚本编写 具体代码请查看:http ...
- JavaScript继承的几种实现
0 什么是继承 继承就是获得存在对象已有的属性和方法的一种方式. [2019.4.26 更新]今日又重新学习了一下JS的继承,在这里整理一下以前的笔记并补充一些新的感悟. 1 JS中继承的几种实现方法 ...
- python中os.path.isdir()函数的使用
在python 中,os.path.isdir(path)函数主要用来判断函数内部的path是否为一个目录 具体关于这个函数的解说参考博客https://blog.csdn.net/xjp_xujip ...
- 使用Redisson实现分布式锁,Spring AOP简化之
源码 Redisson概述 Redisson是一个在Redis的基础上实现的Java驻内存数据网格(In-Memory Data Grid).它不仅提供了一系列的分布式的Java常用对象,还提供了许多 ...
- Web of science数据下载以数据处理
目标网站分析 我们要获取的就是这几个数值 程序实现 # -*- coding: utf-8 -*- """ @Datetime: 2019/2/28 @Author: Z ...