银河麒麟升级后服务未开机自启,需依次验证:1. systemctl is-enabled确认启用状态;2. systemctl show --property=fragmentpath比对单元文件路径及完整性;3. journalctl -u 服务名 --since "1h ago"查启动失败日志;4. systemctl list-dependencies --reverse检查multi-user.target依赖链;5. 确认network-online.target、local-fs.target等关键依赖是否active。

银河麒麟系统升级后某个服务不再随开机自动启动,说明systemd单元文件、依赖关系或配置状态在升级过程中被修改、覆盖或损坏,必须逐层验证其注册状态、运行条件与执行环境。
确认服务是否仍被标记为启用
打开终端,执行:
sudo systemctl is-enabled 服务名.service
若返回 disabled 或 masked,说明升级过程已自动取消其开机自启;若返回 static,表示该服务本身不支持 enable/disable(如 socket 或 target 类型),需检查其触发机制而非启用状态。
立即补救:若确需开机启动,运行 sudo systemctl enable 服务名.service。注意:【此操作不会启动服务,仅建立 multi-user.target.wants 下的软链接】。
检查服务单元文件是否被覆盖或损坏
方法一:比对原始包附带的单元文件与当前系统中实际加载的版本
执行 systemctl show --property=FragmentPath 服务名.service 获取路径,例如 /usr/lib/systemd/system/ssh.service;
再运行 rpm -ql openssh-server | grep '\.service$'(RPM系)或 dpkg -L openssh-server | grep '\.service$'(DEB系),确认该路径是否属于软件包原生文件。
若 FragmentPath 指向 /etc/systemd/system/ 下的同名文件,则说明已被管理员手动覆盖——此时需人工判断该覆盖版本是否兼容新系统版本,尤其注意[Unit]段中 After=、Wants= 是否引用了已废弃的 target(如 graphical.target 在 UKUI 环境下可能被替换为 default.target)。
方法二:校验文件完整性
RHEL/CentOS 系:sudo rpm -V 包名;Debian/Ubuntu 系:sudo dpkg --verify 包名。若输出含“missing”或“5”(MD5 不符),表明单元文件被意外修改或删除,应重装对应软件包恢复原始 .service 文件。
验证服务启动失败的真实原因
第一步:查看服务最近一次启动尝试的日志
sudo journalctl -u 服务名.service --since "1 hour ago" -n 100 --no-pager
重点筛查三类错误:
• “Failed to start …: Unit xxx.service not found” → 单元文件丢失或路径错误;
• “Dependency failed. Another job is queued” → 依赖项(如 network-online.target)未就绪或超时;
• “Permission denied” 或 “No such file or directory” → ExecStart 路径指向不存在的二进制,或脚本无执行权限。
第二步:模拟 systemd 启动流程
执行 sudo systemctl daemon-reload → sudo systemctl start 服务名.service,观察是否报错;
若手动启动成功但开机不启,说明问题出在启动时机或依赖链——此时运行 sudo systemctl list-dependencies --reverse --all 服务名.service,检查其是否被 multi-user.target 正确拉起。
第三步:强制触发并捕获完整初始化上下文
sudo systemd-run --scope --same-dir --shell 'journalctl -u 服务名.service -n 50 --no-pager',可绕过 unit 约束直接复现启动行为,暴露隐藏的环境变量缺失或挂载点未就绪问题。
检查关键依赖服务是否正常启用
多数后台服务依赖基础系统单元,升级后常因依赖变更失效。按顺序执行以下命令:
- sudo systemctl is-active network-online.target → 必须返回 active,否则网络相关服务(如 ssh、ntp)无法启动;
- sudo systemctl is-active local-fs.target → 必须返回 active,否则 /etc/fstab 中定义的挂载点未就绪,导致服务因配置文件路径不可达而静默退出;
- sudo systemctl is-active timers.target → 若服务依赖 timer 触发(如 logrotate.timer),需确认其 enabled 且 next run 时间正常。
任一依赖项非 active,均会导致目标服务跳过启动。此时不要直接 enable 目标服务,而应先修复上游依赖——例如 network-online.target 失效时,需检查 systemd-networkd 或 NetworkManager 是否被禁用,或 /etc/systemd/network/ 下配置是否与新内核网卡命名规则冲突。











