背景
管理的服務(wù)器經(jīng)常因?yàn)樯霞?jí)路由器故障導(dǎo)致固定IP無法訪問,每次均通過肉身去機(jī)房重啟解決機(jī)器/網(wǎng)絡(luò)服務(wù)解決,非常麻煩,尤其是在假期。因此決定利用crontab和shell腳本定期對(duì)網(wǎng)絡(luò)情況進(jìn)行監(jiān)測(cè),如果出現(xiàn)故障則對(duì)可能的問題進(jìn)行修復(fù)并重啟網(wǎng)絡(luò)。
腳本
#!/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創(chuàng)建定時(shí)任務(wù)
因?yàn)橹貑⒕W(wǎng)絡(luò)服務(wù)以及修改DNS均需要sudo權(quán)限,因此不是創(chuàng)建用戶定時(shí)任務(wù),而是在全局定時(shí)任務(wù)/etc/crontab中創(chuàng)建root用戶的定時(shí)任務(wù)。
sudo vim /etc/crontab
在后面添加:
*/30 * * * * root /PATH/TO/SHELL/auto_restart_network.sh >> /PATH/TO/LOGS 2>&1
這樣每隔30分鐘就會(huì)執(zhí)行監(jiān)測(cè)腳本,如果出現(xiàn)網(wǎng)絡(luò)故障則會(huì)重新配置DNS ==> 重啟網(wǎng)絡(luò)服務(wù) ==> 登錄(或其他操作)==> 記錄日志。