更新一下下
This commit is contained in:
136
fix_network_sleep.sh
Executable file
136
fix_network_sleep.sh
Executable file
@@ -0,0 +1,136 @@
|
||||
#!/bin/bash
|
||||
# 功能:修复Ubuntu Server长时间无网络活动导致网络关闭的问题
|
||||
# 使用方法:sudo bash fix_network_sleep.sh
|
||||
|
||||
# 检查是否以root权限运行
|
||||
if [ "$(id -u)" -ne 0 ]; then
|
||||
echo "错误:请使用root权限运行此脚本(sudo bash $0)" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 检测网卡名称(获取第一个活动的以太网接口)
|
||||
get_active_nic() {
|
||||
# 排除lo和docker等虚拟接口,获取第一个物理以太网接口
|
||||
nic=$(ip -br link show | grep -v 'LOOPBACK' | grep -v 'DOCKER' | grep 'UP' | awk '{print $1}' | head -n 1)
|
||||
if [ -z "$nic" ]; then
|
||||
# 如果没有找到活动接口,获取第一个以太网接口
|
||||
nic=$(ip -br link show | grep -v 'LOOPBACK' | grep -v 'DOCKER' | awk '{print $1}' | head -n 1)
|
||||
fi
|
||||
echo "$nic"
|
||||
}
|
||||
|
||||
NIC=$(get_active_nic)
|
||||
|
||||
if [ -z "$NIC" ]; then
|
||||
echo "错误:未检测到网络接口,请检查网络配置"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "检测到活动网络接口:$NIC"
|
||||
|
||||
# 备份相关配置文件
|
||||
backup_configs() {
|
||||
echo "正在备份配置文件..."
|
||||
[ -d /etc/systemd/system/ ] && cp -n /etc/systemd/system/disable-nic-powersave.service /etc/systemd/system/disable-nic-powersave.service.bak 2>/dev/null
|
||||
}
|
||||
|
||||
# 临时禁用网卡节能模式(立即生效)
|
||||
disable_nic_powersave_temp() {
|
||||
echo "正在临时禁用网卡节能模式..."
|
||||
if command -v ethtool &> /dev/null; then
|
||||
# 禁用EEE节能
|
||||
sudo ethtool --change "$NIC" eee off 2>/dev/null
|
||||
# 禁用电源管理
|
||||
sudo ethtool -s "$NIC" power management off 2>/dev/null
|
||||
# 启用WOL功能
|
||||
sudo ethtool -s "$NIC" wol g 2>/dev/null
|
||||
else
|
||||
echo "警告:未安装ethtool,正在安装..."
|
||||
sudo apt update >/dev/null
|
||||
sudo apt install -y ethtool >/dev/null
|
||||
disable_nic_powersave_temp
|
||||
fi
|
||||
}
|
||||
|
||||
# 永久禁用网卡节能模式(系统启动时生效)
|
||||
disable_nic_powersave_permanent() {
|
||||
echo "正在配置永久禁用网卡节能模式..."
|
||||
|
||||
# 创建systemd服务
|
||||
cat << EOF | sudo tee /etc/systemd/system/disable-nic-powersave.service > /dev/null
|
||||
[Unit]
|
||||
Description=Disable NIC Power Saving Mode for $NIC
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
ExecStart=/usr/sbin/ethtool -s $NIC wol g
|
||||
ExecStart=/usr/sbin/ethtool --change $NIC eee off
|
||||
ExecStart=/usr/sbin/ethtool --change $NIC power management off
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
# 启用并启动服务
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl enable disable-nic-powersave.service
|
||||
sudo systemctl start disable-nic-powersave.service
|
||||
}
|
||||
|
||||
# 优化SSH保持连接设置
|
||||
optimize_ssh_settings() {
|
||||
echo "正在优化SSH连接设置..."
|
||||
SSH_CONFIG="/etc/ssh/sshd_config"
|
||||
|
||||
# 备份SSH配置
|
||||
[ -f "$SSH_CONFIG" ] && cp -n "$SSH_CONFIG" "$SSH_CONFIG.bak"
|
||||
|
||||
# 设置SSH心跳检测
|
||||
if ! grep -q "^ClientAliveInterval" "$SSH_CONFIG"; then
|
||||
echo "ClientAliveInterval 60" >> "$SSH_CONFIG"
|
||||
else
|
||||
sed -i 's/^ClientAliveInterval.*/ClientAliveInterval 60/' "$SSH_CONFIG"
|
||||
fi
|
||||
|
||||
if ! grep -q "^ClientAliveCountMax" "$SSH_CONFIG"; then
|
||||
echo "ClientAliveCountMax 3" >> "$SSH_CONFIG"
|
||||
else
|
||||
sed -i 's/^ClientAliveCountMax.*/ClientAliveCountMax 3/' "$SSH_CONFIG"
|
||||
fi
|
||||
|
||||
# 重启SSH服务
|
||||
sudo systemctl restart sshd
|
||||
}
|
||||
|
||||
# 检查并修复DNS服务问题
|
||||
fix_dns_service() {
|
||||
echo "正在检查DNS服务..."
|
||||
if ! systemctl is-active --quiet systemd-resolved; then
|
||||
echo "修复DNS服务问题..."
|
||||
sudo apt update >/dev/null
|
||||
sudo apt install --reinstall -y systemd-resolved >/dev/null
|
||||
sudo systemctl enable --now systemd-resolved
|
||||
fi
|
||||
}
|
||||
|
||||
# 显示当前网卡电源管理状态
|
||||
show_status() {
|
||||
echo -e "\n当前网络接口状态:"
|
||||
echo "-------------------------"
|
||||
ip link show "$NIC" | grep -A 1 "$NIC"
|
||||
echo -e "\n电源管理状态:"
|
||||
ethtool "$NIC" | grep -iE "power management|energy"
|
||||
echo "-------------------------"
|
||||
echo "配置已完成,建议重启系统使所有设置生效"
|
||||
echo "重启命令:sudo reboot"
|
||||
}
|
||||
|
||||
# 主流程执行
|
||||
backup_configs
|
||||
disable_nic_powersave_temp
|
||||
disable_nic_powersave_permanent
|
||||
optimize_ssh_settings
|
||||
fix_dns_service
|
||||
show_status
|
||||
|
||||
Reference in New Issue
Block a user