CentOS7重启网络报错,network与NetworkManager冲突处理
前言
CentOS7改完网卡配置后 systemctl restart network 报错,常见提示是 "Job for network.service failed because the control process exited with error code"。根源往往是老的 network 服务和新的 NetworkManager(简称NM)同时管一块网卡,配置互相打架。本篇讲清楚怎么判断、怎么处理。
一、先看报错到底是什么
# 重启网络看具体错误
systemctl restart network
# 查看详细失败原因
systemctl status network -l
journalctl -xe | grep network
# 看网卡配置有没有写错
cat /etc/sysconfig/network-scripts/ifcfg-ens33
常见报错:配置里 NM_CONTROLLED=no 与NM冲突、ONBOOT、网关或IP写重复、网卡名和配置文件名对不上。
二、方案一:服务器纯命令行,关掉NetworkManager
服务器一般用不到图形网络管理,直接停用NM,让network接管最干净:
# 停止并禁用NetworkManager
systemctl stop NetworkManager
systemctl disable NetworkManager
# 再重启network
systemctl restart network
同时确认网卡配置里写:
NM_CONTROLLED=no
这样两块不会抢同一张网卡。
三、方案二:保留NetworkManager,用它管网络
如果是桌面或需要NM的场景,就别用老network:
# 查看NM识别到的连接
nmcli connection show
# 重启某块网卡连接
nmcli connection down ens33 && nmcli connection up ens33
# 查看设备状态
nmcli device status
注意:用NM管理时,配置尽量通过 nmcli 或nmtui改,不要手改ifcfg后又让network重启。
四、常见配置文件检查项
/etc/sysconfig/network-scripts/ifcfg-ens33:
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=114.114.114.114
NAME/DEVICE要和实际网卡名一致;- 改完配置重启前,保留一个已登录SSH会话,防止网络断了把自己关外面。
五、常见坑
- network和NetworkManager同时重启:两个服务都抢网卡,IP时有时无,二选一;
- 网卡名变了配置文件没改:新系统网卡名是ens33不是eth0,文件名和DEVICE要对应;
- GATEWAY写了两个:多网卡配多个网关会路由冲突;
- 改完只restart不验证:用
ping、ip addr确认IP真的起来了; - 云服务器别乱关NM:部分云镜像靠NM配内网,关了可能丢内网,先确认再操作。
总结
重启网络报错,先 systemctl status network -l 看原因;服务器场景停掉并禁用NetworkManager、配置里 NM_CONTROLLED=no,再restart network;桌面场景改用nmcli管理。二选一,不要两个服务同时管网卡。
遇到问题加QQ23979811 协助处理
CentOS7重启网络报错,network与NetworkManager冲突处理
前言
CentOS7 里有两套网络管理工具:传统的 network 服务和新的 NetworkManager。两个同时用就会打架,重启网络的时候报错,甚至把网络搞断。本文就讲一下这个冲突怎么解决。
报错现象
执行 systemctl restart network 或者 service network restart 的时候,报类似这样的错:
Restarting network (via systemctl): Job for network.service failed. See 'systemctl status network.service' and 'journalctl -xn' for details.
或者:
RTNETLINK answers: File exists
原因
CentOS7 默认装了 NetworkManager(简称 NM),它也在管理网络接口。传统的 network 服务也在管。两个同时管同一个网卡,配置就会冲突。
解决方法
方法一:关掉 NetworkManager(推荐服务器用)
服务器一般不需要图形界面的网络管理工具,直接关掉:
systemctl stop NetworkManager
systemctl disable NetworkManager
然后重启 network:
systemctl restart network
方法二:让 network 忽略 NetworkManager
编辑网络配置文件:
vi /etc/sysconfig/network-scripts/ifcfg-eth0
在文件里加一行:
NM_CONTROLLED=no
意思是这个网卡不归 NetworkManager 管,只由 network 服务管理。
然后重启网络:
systemctl restart network
方法三:全部交给 NetworkManager 管
如果你想用 NM 管理,那就把传统 network 关掉:
systemctl stop network
systemctl disable network
然后用 NM 的命令管理网络:
nmcli connection show
nmcli connection up eth0
验证
重启网络之后,看看网卡 IP 还在不在:
ip addr
如果 IP 还在,能 ping 通外网,就说明搞定了。
常见坑
坑1:改了配置把自己踢下线
远程 SSH 连上去改网络配置,改完重启网络,结果 SSH 断了,再也连不上。
解决:
- 改配置之前先开个备用 SSH 连接,别关
- 或者直接用云服务器控制台的 VNC 操作
- 不要在生产环境随便重启网络
坑2:重启服务器后网络又坏了
临时重启 network 好了,但重启服务器后又不行了。
原因: NetworkManager 又自动启动了,和 network 冲突。
解决: 把 NetworkManager 禁用掉:
systemctl disable NetworkManager
坑3:网卡名不是 eth0
新一点的系统网卡名可能是 ens33、enp0s3 这种。
解决: 先看一下网卡叫什么:
ip addr
然后改对应的配置文件,比如 ifcfg-ens33。
总结
CentOS7 网络冲突的解决思路很简单:
| 方案 | 操作 | 适用场景 |
|---|---|---|
| 关 NM | systemctl disable NetworkManager |
服务器,推荐 |
| NM_CONTROLLED=no | 网卡配置里加这行 | 只用 network 服务 |
| 全用 NM | 关掉 network,用 nmcli | 桌面环境 |
服务器上推荐直接关掉 NetworkManager,用传统的 network 服务管理网络,简单稳定。
遇到问题加QQ23979811 协助处理