日期
2023年10月25日
问题描述
在尝试使用 systemctl restart network
重启网络服务时,出现以下错误:
Job for network.service failed because the control process exited with error code.
See "systemctl status network.service" and "journalctl -xe" for details.
环境信息
- 操作系统:CentOS 7.9
- 网络服务:
network.service
(传统网络服务) - 冲突服务:
NetworkManager
(现代网络管理工具)
错误日志
-
查看服务状态:
$ systemctl status network.service ● network.service - LSB: Bring up/down networkingLoaded: loaded (/etc/rc.d/init.d/network; bad; vendor preset: disabled)Active: failed (Result: exit-code) since Wed 2023-10-25 10:00:00 CST; 5min ago
-
查看详细日志:
$ journalctl -u network.service -xe Oct 25 10:00:00 localhost network[1234]: RTNETLINK answers: File exists Oct 25 10:00:00 localhost systemd[1]: network.service: control process exited, code=exited status=1
分析过程
-
初步猜测:
- 网络配置文件错误(如IP冲突、接口名称不匹配)。
- 服务冲突(
network
与NetworkManager
同时运行)。
-
排查步骤:
- 检查配置文件:
cat /etc/sysconfig/network-scripts/ifcfg-eth0 # 确认ONBOOT=yes,且接口名称与实际一致(如eth0、ens33)
- 查看当前网络接口:
ip a # 发现实际接口为ens33,但配置文件中仍为eth0
- 检查服务状态:
systemctl is-active NetworkManager # 发现NetworkManager正在运行
- 检查配置文件:
-
锁定原因:
NetworkManager
与network
服务同时运行,争夺网络接口控制权。- 配置文件中的接口名称(
eth0
)与实际接口名称(ens33
)不一致。
解决方案
-
临时解决冲突:
# 停止NetworkManager服务 sudo systemctl stop NetworkManager# 重启network服务 sudo systemctl restart network
-
修复配置文件:
# 修改接口名称(将eth0改为ens33) sudo vi /etc/sysconfig/network-scripts/ifcfg-ens33
-
永久禁用冲突服务(二选一):
- 方案A:禁用
NetworkManager
(适合服务器环境)sudo systemctl disable NetworkManager sudo systemctl enable network
- 方案B:禁用
network
(适合桌面环境)sudo systemctl disable network sudo systemctl enable NetworkManager
- 方案A:禁用
验证结果
- 确认服务状态:
systemctl status network.service # 显示active (running)
- 测试网络连接:
ping 8.8.8.8 # 成功收到响应
预防措施
-
统一网络管理工具:
- 服务器环境:使用
network.service
,禁用NetworkManager
。 - 桌面环境:使用
NetworkManager
,禁用network.service
。
- 服务器环境:使用
-
配置文件检查清单:
- 接口名称与实际一致(使用
ip a
或nmcli device
查看)。 - 确保
ONBOOT=yes
,避免重启后网络未激活。
- 接口名称与实际一致(使用
-
操作前备份:
cp /etc/sysconfig/network-scripts/ifcfg-ens33{,.bak}
相关参考资料
- Red Hat Network Configuration Guide
man systemctl
:查看服务管理命令详解
备注:下次遇到类似问题,优先检查服务冲突和接口名称一致性!