背景
管理的服务器经常因为上级路由器故障导致固定IP无法访问,每次均通过肉身去机房重启解决机器/网络服务解决,非常麻烦,尤其是在假期。因此决定利用crontab和shell脚本定期对网络情况进行监测,如果出现故障则对可能的问题进行修复并重启网络。
脚本
#!/bin/bash
ping www.baidu.com -c 1 >/dev/null
if [ $? -ne 0 ];then
# reset DNS
bash -c 'echo nameserver 166.111.8.28 > /etc/resolv.conf'
# restart network
# /etc/init.d/networking restart
service network-manager restart
# doing other things
bash /home/dev/login.sh
# loging
echo `date` network restart
else
echo `date` network works fine
fi
crontab创建定时任务
因为重启网络服务以及修改DNS均需要sudo权限,因此不是创建用户定时任务,而是在全局定时任务/etc/crontab
中创建root用户的定时任务。
sudo vim /etc/crontab
在后面添加:
*/30 * * * * root /PATH/TO/SHELL/auto_restart_network.sh >> /PATH/TO/LOGS 2>&1
这样每隔30分钟就会执行监测脚本,如果出现网络故障则会重新配置DNS ==> 重启网络服务 ==> 登录(或其他操作)==> 记录日志。