[排错] 解决 Linux 启动时某些服务没有开机自启 (日志里报错: “deleted to break ordering cycle starting”)

报错代码

某些服务没有开机自启例如 NetworkManager.service

原因分析

在系统日志里可以类似 …… Job network.target/start deleted to break ordering cycle starting with …… 报错例如:

# cat /var/log/messages
Jan 1 10:09:24 server systemd[1]: network-online.target: Found ordering cycle on network.target/start
Jan 1 10:09:24 server systemd[1]: network-online.target: Found dependency on NetworkManager.service/start
Jan 1 10:09:24 server systemd[1]: network-online.target: Found dependency on basic.target/start
Jan 1 10:09:24 server systemd[1]: network-online.target: Found dependency on slices.target/start
Jan 1 10:09:24 server systemd[1]: network-online.target: Found dependency on mysql.slice/start
Jan 1 10:09:24 server systemd[1]: network-online.target: Found dependency on remote-fs.target/start
Jan 1 10:09:24 server systemd[1]: network-online.target: Found dependency on remote-fs-pre.target/start
Jan 1 10:09:24 server systemd[1]: network-online.target: Found dependency on iscsi.service/start
Jan 1 10:09:24 server systemd[1]: network-online.target: Found dependency on network-online.target/start
Jan 1 10:09:24 server systemd[1]: network-online.target: Job network.target/start deleted to break ordering cycle starting with network-online.target/start
Jan 1 10:09:24 server systemd[1]: NetworkManager-wait-online.service: Found ordering cycle on NetworkManager.service/start
Jan 1 10:09:24 server systemd[1]: NetworkManager-wait-online.service: Found dependency on basic.target/start
Jan 1 10:09:24 server systemd[1]: NetworkManager-wait-online.service: Found dependency on slices.target/start
Jan 1 10:09:24 server systemd[1]: NetworkManager-wait-online.service: Found dependency on mysql.slice/start
Jan 1 10:09:24 server systemd[1]: NetworkManager-wait-online.service: Found dependency on remote-fs.target/start
Jan 1 10:09:24 server systemd[1]: NetworkManager-wait-online.service: Found dependency on remote-fs-pre.target/start
Jan 1 10:09:24 server systemd[1]: NetworkManager-wait-online.service: Found dependency on iscsi.service/start
Jan 1 10:09:24 server systemd[1]: NetworkManager-wait-online.service: Found dependency on network-online.target/start
Jan 1 10:09:24 server systemd[1]: NetworkManager-wait-online.service: Found dependency on NetworkManager-wait-online.service/start
Jan 1 10:09:24 server systemd[1]: NetworkManager-wait-online.service: Job NetworkManager.service/start deleted to break ordering cycle starting with NetworkManager-wait-online.service/start

从案例中日志里的内容可以判断:
1) network.target/NetworkManager.service 启动
2) NetworkManager.service 作为基础服务依赖 basic.target
3) basic.target 依赖所有 slice 包括 mysql.slice
4) mysql.slice 依赖 iscsi.service/remote-fs.target/remote-fs-pre.target
5) iscsi.service/remote-fs.target/remote-fs-pre.target 依赖 network.target/NetworkManager.service
6) 系统为了防止启动时陷入死循环,systemd 报错 Job NetworkManager.service/start deleted to break ordering cycle 并放弃启动 NetworkManager.service

解决方法

取消不太重要的服务的依赖要求

# vi /etc/systemd/system/mysql.slice

将以下内容:

......
Before=slices.target
Wants=-.slice
After=-.slice remote-fs.target
......

修改为:

......
Before=slices.target
Wants=-.slice
After=-.slice remote-fs.target
......

(补充:这里以取消使用 /etc/systemd/system/mysql.slice 文件的服务的依赖要求为例)

[命令] Linux 命令 hostname (修改主机名、显示主机名和 IP 地址)

内容一:修改 Linux 主机名

[root@server ~]# hostnamectl set-hostname eternalcenter.com

内容二:显示已经修改的主机名

2.1 显示已经修改的部分主机名

[root@eternalcenter ~]# hostname
eternalcenter

(补充:这里只会显示 “.” 符号前面的内容,“.” 后面的内容不会在这里显示)

2.2 显示已经修改的全部主机名,也就是 FQDN

[root@eternalcenter ~]# hostname -f
eternalcenter.com

内容三:显示 IP 地址

3.1 显示本地最后 1 个 IP 地址

[root@eternalcenter ~]# hostname -i

3.2 显示本地所有 IP 地址

[root@eternalcenter ~]# hostname -I

[内容] 两台 Linux MAC 地址冲突后的出现的现象 (两台 Linux 系统在同 1 个二层交换机下使用相同的 MAC 地址)

现象一:ping 命令会卡住

ping MAC 地址冲突的 Linux IP 地址时,ping 的延迟不高,但是 ping 命令会随机卡住

现象二:SSH 远程登录后输入命令会卡住

通过 SSH 登录 MAC 地址冲突的 Linux IP 地址时,可以正常登录,但是输入命令后会随机卡住

现象三:SNMP 客户端失效

此时 MAC 地址冲突的 Linux SNMP 客户端无法被其他机器发现。若此时通过 SNMPv3 访问此 Linux 的 SNMP 客户端,验证可以通过,但是无法拉取信息

[步骤] Linux 重启后网卡上没有 IP 地址的处理方法

步骤一:在硬件管理页面检查物理网卡是否联通

记录需要使用的网络端口的网卡机器码 (MAC) 地址

(步骤略)


注意:
1) 只有物理机才需要完成这步
2) 当物理机 1 个网络模块上有 2 个网络端口时,要特别注意 2 个网络端口各自的网卡机器码 (MAC) 地址,例如:戴尔服务器网络端口的网卡机器码 (MAC) 地址在页面的最下方

步骤二:在系统中查看对应的网卡是否联通

2.1 使用 IP 命令查看对应的网卡是否联通

# ip a s

或者:

# ip address show

(补充:当出现 ”UP“ 字样时代表网卡已经启动)

(注意:nmcli device show 命令不能确认此时网卡是否联通)

2.2 使用 ethtool 命令查看对应的网卡是否联通

# ethtool eth0

(注意:nmcli device show 命令不能确认此时网卡是否联通)

步骤三:尝试配置临时 IP 地址和临时网关 (只有当确认网卡是联通的时候才进行以下操作)

3.1 尝试配置临时 IP 地址

# ifconfig eth0 192.168.0.2/24

或者:

# ip a add 192.168.0.2/24 dev eth0

(补充:这里以给 eth0 网卡添加临时 IP 地址 192.168.0.2/24 为例)

(注意:只有当确认网卡是联通的时候才进行此操作)

3.2 尝试配置临时网关

# route add default gw 192.168.0.1

或者:

# ip route add default via 192.168.0.1

(注意:只有当确认网卡是联通的时候才进行此操作)

3.3 查看配置的临时 IP 地址和临时网关

3.3.1 查看配置的临时 IP 地址
# ip a s
3.3.2 查看配置的临时网关
# route -n