bash计时器的实现案例:检查并记录网络稳定性的脚本

简介:

bash的帮助中提到SECONDS系统变量:

SECONDS Each  time this parameter is referenced, the number of seconds since shell invocation is returned.  If a value is assigned to SECONDS, the value returned upon subsequent references is the number of seconds since the assignment plus the value assigned.  If SECONDS is unset, it loses its special properties, even if it is subsequently reset.


我们在程序执行期间,检查这个变量,即可实现记时的功能。


本例是用来每隔一个固定时间,ping一个IP,出现故障时记录下来的脚本。

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
#!/bin/bash 
#set -o errexit
 
export  SCRIPT=$0
SID=$PPID
usage(){
     echo  -e  "Usage:"
     echo  -e  "\tbash $0 [OPTs]"
     echo  -e  "\t-W|--timeout\t\t<M>"
     echo  -e  "\t-I|--interval\t\t<N>"
     echo  -e  "\t-i|--ip\t\t\t<A.B.C.D>"
     echo  -e  "\t-L|--level\t\t<info|error>"
     echo  -e  "\t-l|--log\t\t</tmp/${SCRIPT}-${SID}.log>"
     echo  -e  "\t-h\t\t\tPrint this info"
     echo  -e  "Example:"
     echo  -e  "\tbash $0 -W 1 -I 3 -i 127.0.0.1 -L error -log /tmp/${SCRIPT}-${SID}.log"
     echo  -e  "\tbash $0"
     exit  255
}
 
[ $ # -eq 4 ] && usage
# 默认参数
LOGFILE= "/tmp/${SCRIPT}-${SID}.log"
touch  $LOGFILE
TIMEOUT=1
INTERVAL=10
LEVEL=info
IP=127.0.0.1
MyIP=$(ip addr sh eth0 | awk  '/^[\ ]*inet /{split($2,IP,"/");printf IP[1]}' )
# 参数获取
TEMP=$(getopt -o W:I:i:L:l:h --long timeout:,interval:,ip:,level:,log:,help --  "$@" )
[ $? != 0 ] && usage
eval  set  --  "$TEMP" 
 
 
# 参数处理
while  true do
     case  "$1"  in
         -W|--timeout) TIMEOUT=$2;  shift  2;;
         -I|--interval) INTERVAL=$2;  shift  2;;
         -i|--ip) IP=$2;  shift  2;;
         -L|--level) LEVEL=$2;  shift  2;;
         -l|--log) LOGFILE=$2;  shift  2;;
         -h|--help) usage;  shift ;;
         --)  shift break  ;;
     esac
done
 
 
"$IP"  ""  ] && usage
adjust(){
     return  $((SECONDS%INTERVAL))
}
 
pinger(){
     ping  $1 -W $TIMEOUT -c 1 |  tail  -1 | awk  -F/  '{print $(NF-1)}'  2> /dev/null  
}  
 
logger(){
     echo  -e  "$(date +%F"  "%T)\t" "$@"   
}
 
trapper(){
     trap  "logger \"EXIT($SID)\t$MyIP -> $IP\" >> $LOGFILE && exit 0"   1 2 9 15 
}
 
trapper
logger  "START($SID)\t$MyIP -> $IP"  >> $LOGFILE 
while  true
do
     if  adjust;  then
         unset 
         t=$(pinger $IP)
         if  "$t"  ""  ];  then
             logger  "ERROR($SID)\t$MyIP -> $IP ${TIMEOUT}(S)"  >> $LOGFILE &
         else
             "$LEVEL"  "erorr"  ] || logger  "INFO($SID)\t$MyIP -> $IP ${t}(ms)"  >> $LOGFILE &
         fi
         sleep  1
     fi
     sleep  0.1
done

执行

bash pinger.sh -W 1 -I 2 -i a.b.c &

执行结果如下:

# tail -f -n 10 /tmp/bash-26729.log 

2015-04-28 17:24:50 START(26729)192.168.202.2 -> a.b.c

2015-04-28 17:24:50 INFO(26729)192.168.202.2 -> a.b.c 0.630(ms)

2015-04-28 17:24:52 INFO(26729)192.168.202.2 -> a.b.c 0.575(ms)

2015-04-28 17:24:54 INFO(26729)192.168.202.2 -> a.b.c 0.875(ms)






     本文转自xiaoyuwang 51CTO博客,原文链接:http://blog.51cto.com/wangxiaoyu/1639861,如需转载请自行联系原作者

相关文章
|
边缘计算 人工智能 5G
5G引领家庭网络升级:速度、稳定性与智能化的新时代
5G引领家庭网络升级:速度、稳定性与智能化的新时代
911 69
|
人工智能 运维 监控
阿里云携手神州灵云打造云内网络性能监测标杆 斩获中国信通院高质量数字化转型十大案例——金保信“云内网络可观测”方案树立云原生运维新范式
2025年,金保信社保卡有限公司联合阿里云与神州灵云申报的《云内网络性能可观测解决方案》入选高质量数字化转型典型案例。该方案基于阿里云飞天企业版,融合云原生引流技术和流量“染色”专利,解决云内运维难题,实现主动预警和精准观测,将故障排查时间从数小时缩短至15分钟,助力企业降本增效,形成可跨行业复制的数字化转型方法论。
806 6
|
安全 网络协议 网络安全
当虚拟机出现网络连接问题时,应该先检查Hyper-V的网卡连接配置
当虚拟机出现网络连接问题时,应首先检查Hyper-V的网卡配置。具体步骤包括:确认虚拟机运行状态、检查虚拟交换机类型和物理网卡连接、确保虚拟机网络适配器正确连接到虚拟交换机,并验证网络配置(IP地址等)。常见问题如虚拟交换机配置错误、网络适配器未连接或防火墙阻止连接,可通过重新配置或调整设置解决。必要时重启虚拟机和宿主机,查看事件日志或联系技术支持以进一步排查问题。
|
安全 Linux 网络安全
利用Python脚本自动备份网络设备配置
通过本文的介绍,我们了解了如何利用Python脚本自动备份网络设备配置。该脚本使用 `paramiko`库通过SSH连接到设备,获取并保存配置文件。通过定时任务调度,可以实现定期自动备份,确保网络设备配置的安全和可用。希望这些内容能够帮助你在实际工作中实现网络设备的自动化备份。
824 14
|
容灾 网络协议 数据库
云卓越架构:云上网络稳定性建设和应用稳定性治理最佳实践
本文介绍了云上网络稳定性体系建设的关键内容,包括面向失败的架构设计、可观测性与应急恢复、客户案例及阿里巴巴的核心电商架构演进。首先强调了网络稳定性的挑战及其应对策略,如责任共担模型和冗余设计。接着详细探讨了多可用区部署、弹性架构规划及跨地域容灾设计的最佳实践,特别是阿里云的产品和技术如何助力实现高可用性和快速故障恢复。最后通过具体案例展示了秒级故障转移的效果,以及同城多活架构下的实际应用。这些措施共同确保了业务在面对网络故障时的持续稳定运行。
|
运维 监控 网络协议
|
存储 缓存 监控
Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
本文介绍了Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
1516 8
|
网络虚拟化
生成树协议(STP)及其演进版本RSTP和MSTP,旨在解决网络中的环路问题,提高网络的可靠性和稳定性
生成树协议(STP)及其演进版本RSTP和MSTP,旨在解决网络中的环路问题,提高网络的可靠性和稳定性。本文介绍了这三种协议的原理、特点及区别,并提供了思科和华为设备的命令示例,帮助读者更好地理解和应用这些协议。
1106 4
|
数据库连接 Go 数据库
Go语言中的错误注入与防御编程。错误注入通过模拟网络故障、数据库错误等,测试系统稳定性
本文探讨了Go语言中的错误注入与防御编程。错误注入通过模拟网络故障、数据库错误等,测试系统稳定性;防御编程则强调在编码时考虑各种错误情况,确保程序健壮性。文章详细介绍了这两种技术在Go语言中的实现方法及其重要性,旨在提升软件质量和可靠性。
316 1
|
Docker 容器
docker中检查容器的网络模式
【10月更文挑战第5天】
1749 1