Bash
1 前言
一个问题,一篇文章,一出故事。
笔者今天遇到家里的服务器网络故障,由于在上班,无法及时修复。
下班后检查不知为何网卡地址丢失(可能与刚进行系统升级有关),检查系统日志亦无所获,但通过重启网络服务可恢复网络。
于是,笔者想到暂时先写一个脚本监视网络状态并自动处理,容后再慢慢查找原因。
2 最佳实践
2.1 创建脚本目录
mkdir ~/scripts
2.2 创建脚本
vim ~/scripts/monitorNetwork.sh
加入如下配置,
#!/bin/bash sleepTime="1" errCountThreshold="10" monitorLogs="/var/log/monitorNetwork.log" pidFile="/run/monitorNetwork.pid" monitorNetwork() { errCount=0 runSleepTime="$sleepTime" while true; do sleep "$runSleepTime" ping -c 1 _gateway > /dev/null 2>&1 if [ "$?" -eq "0" ]; then errCount=0 runSleepTime="$sleepTime" fi ((errCount++)) if [ "$errCount" -ge "$errCountThreshold" ]; then echo `date +"%Y-%m-%d %H:%M:%S"`" Failed to ping the gateway for ${errCount} consecutive times." >> $monitorLogs #systemctl restart NetworkManager network systemctl restart NetworkManager.service networking.service runSleepTime="180" fi done } if [ -f "$pidFile" ]; then pid=$(cat "$pidFile") if kill -0 $pid 2>/dev/null; then echo "The script is already running,PID: $pid" exit 1 fi rm -f "$pidFile" fi echo $$ > "$pidFile" trap "rm -f $pidFile; exit" SIGINT SIGTERM monitorNetwork
2.3 设置脚本触发
crontab -e
加入如下设置,
*/30 * * * * bash ~/scripts/monitorNetwork.sh
没有评论