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编辑器读取数据流时,它会基于换行符的位置将数据分成行,一次处理 ...
随机推荐
- JS正则四个反斜杠的含义
我们首先来看如下代码,在浏览器中输出的是什么? // 在浏览器中输出的 console.log('\\'); // 输出 \ console.log('\\\\'); // 输出 \\ 一:js正则直 ...
- 技术趋势:React vs Vue vs Angular
React.Vue 和 Angular 这两年发展状况如何?2019 年哪个技术最值得学习? 前几天 Medium 上有一位作者发表了一篇关于 React.Vue 和 Angular 技术趋势的文章( ...
- Asp.Net Core使用NLog+Mysql的几个小问题
项目中使用NLog记录日志,很好用,之前一直放在文本文件中,准备放到db中,方便查询. 项目使用了Mysql,所以日志也放到Mysql上,安装NLog不用说,接着你需要安装Mysql.Data安装包: ...
- PS绘制飘逸彩色丝带教程
一.新建一个大小适当的图像,点击工具栏上的钢笔工具,使用形状图层来绘制出下图的形状. 二.把形状所在层的填充设为0%,填充设成0是不会影响到图层的,不像不透明度那样会影响图层样式的效果. 三.双击丝带 ...
- Babel插件开发入门指南
文章概览 主要包括:Babel如何进行转码.插件编写的入门基础.实例讲解如何编写插件. 阅读本文前,需要读者对Babel插件如何使用.配置有一定了解,可以参考笔者之前的文章. 本文所有例子可以在 笔者 ...
- 关于Java面试
Java基础知识复习 1. 简单讲一下Java跨平台的原理 由于操作系统(Windows.Linux)支持的指令集,不是完全一致的.就会让我们程序在不同的操作系统上执行不同的代码.Java开发了不同操 ...
- c语言提高(第二次作业)
1. 画出字符串一级指针内存四区模型 #include <stdio.h> #include <string.h> int main(void) { char buf[20]= ...
- 爬虫免登录进入github
import requests import re ret = requests.get('https://github.com/login') print(ret.headers) cookies ...
- nginx之安装、多虚拟主机、反向代理和负载均衡
一.web服务器与web框架 1.web服务器简介 Web 网络服务是一种被动访问的服务程序,即只有接收到互联网中其他主机发出的请求后才会响应,最终用于提供服务程序的Web服务器会通过 HTTP(超文 ...
- js对内容进行编码(富文本编辑器使用居多)
escape(string)函数可对字符串进行编码,这样就可以在所有的计算机上读取该字符串. 使用unescape(string) 对 escape() 编码的字符串进行解码.