汇知百科
白蓝主题五 · 清爽阅读
首页  > 故障排查

用命令行自动化网络操作解决常见故障

公司内网突然上不了外部网站,但局域网设备之间还能通信。运维小李没急着重启路由器,而是打开终端跑了一条脚本,三分钟后问题自动定位到 DNS 配置异常。这种场景下,命令行自动网络操作比手动排查快得多。

为什么需要自动化处理网络任务

手动执行 ping、curl、netstat 这些命令适合临时检查,但遇到频繁断连、周期性丢包或批量设备检测时,重复敲命令不仅累还容易出错。比如每天早上要确认十个服务接口是否可达,写个自动脚本定时运行更省心。

常见的自动化工具和用法

Linux 下最基础的是 shell 脚本结合 cron 定时任务。例如,下面这个脚本会每隔一分钟检查一次网关连通性,并记录时间戳:

#!/bin/bash
GATEWAY="192.168.1.1"
LOGFILE="/var/log/network_check.log"

if ping -c 1 $GATEWAY > /dev/null 2>&1; then
    echo "$(date): Gateway OK" >> $LOGFILE
else
    echo "$(date): Gateway unreachable!" >> $LOGFILE
fi

把这个脚本保存为 check_gateway.sh,加上可执行权限,再用 crontab 设置每分钟运行一次:

crontab -e
# 添加这一行
* * * * * /path/to/check_gateway.sh

实战:自动恢复断开的连接

某次远程办公时,VPN 经常半夜掉线。与其第二天才发现同步失败,不如让系统自己修。可以写个脚本检测特定域名是否能访问,如果失败就尝试重新连接 OpenVPN。

#!/bin/bash
TEST_URL="internal.company.com"
VPN_CONFIG="/etc/openvpn/client.conf"

if ! curl -s --connect-timeout 5 http://$TEST_URL > /dev/null; then
    systemctl stop openvpn-client@client
    sleep 2
    systemctl start openvpn-client@client
    logger "VPN restarted due to connectivity loss"
fi

配合日志分析快速定位问题

光执行还不够,得留下痕迹。把每次检测的结果写进日志文件,后续可以用 grep 或 awk 提取关键信息。比如想看最近哪些时间点出现过网关不通:

grep "unreachable" /var/log/network_check.log

发现集中在某个时间段,可能就是那个时段有网络割接或者 DHCP 服务抖动。

注意别踩坑

自动化虽好,但也得小心使用。脚本里涉及重启服务的操作要有延迟控制,避免无限循环重启拖垮系统。另外,输出日志记得加时间戳,不然排查的时候分不清先后顺序。还有,别忘了给脚本设置正确的权限,别让非管理员也能随意修改。

把这些小脚本部署在服务器或本地开发机上,很多网络问题还没影响到别人,就已经被悄悄处理完了。