Ubuntu 下监控并自动重启网卡
2019年8月6日
很多时候网站服务器挂掉也可能是因为网卡挂掉了,如果你网站不能访问时 SSH 也无效了一般都是这个问题。这时可以通过一个定时脚本监控网络并进行自动重启。相关文章:Linux 下如何监控并自动重启 apache
1 创建脚本 auto_restart_network.sh
内容如下:
1 2 3 4 5 6 7 8 9 | #!/bin/bash ping www.baidu.com -c 1 >/dev/null if [ $? -ne 0 ];then # systemctl restart network sudo /etc/init.d/networking restart echo `date` network restart >> /alidata/tools/network_restart_logs.txt else echo `date` network works fine fi |
上传此文件到服务器。
注释:
1)该脚本会 ping www.baidu.com 网站,当然你也可以改成其他的网站,比如你自己的页面。
2)根据 ping 的结果,如果不成功的话,则使用命令重启网络连接服务。
2 创建定时任务
创建定时任务有两种方法一种是直接编辑 /etc/crontab,运行:
1 | sudo vim /etc/crontab |
在后面添加:
1 | */30 * * * * root /alidata/tools/auto_restart_network.sh >> /alidata/tools/logs.txt 2>&1 |
其中 */30 表示每 30 分钟执行一次脚本。
关于 crontab 时间说明如下:
1 2 3 4 5 6 7 8 | # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR #sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * command to be executed |
另一种是使用命令:
1 | crontab -e |
在后面添加:
1 | */30 * * * * /alidata/tools/auto_restart_network.sh >> /alidata/tools/logs.txt 2>&1 |
我的理解,这两种方式前者添加的是一个整个系统所有用户的定时任务,所以在时间后面需要指定用户 root。后者是当前用户的定任务。采用哪一种都可以。
重启定时任务:
1 | sudo service crond restart |
如果顺利的话这一脚本就会每隔 30 分钟执行一次,并且可以在 /alidata/tools/network_restart_logs.txt 看到脚本执行的日志以及 /alidata/tools/logs.txt 看到每次执行的输出。因为频率低以及只输出不多的几个字符,这两个 log 文件通常不会增加很多,不过也应注意下及时清除。
附录:网络服务操作命令
Ubuntu 下网络服务操作命令如下:
开启网络服务
1 | sudo /etc/init.d/networking start |
关闭网络服务
1 | sudo /etc/init.d/networking stop |
重新启动网络服务
1 | sudo /etc/init.d/networking restart |
参考材料
https://www.cyberciti.biz/faq/linux-restart-network-interface/