麒麟v10默认使用systemd管理启动,需通过[unit]段的after/before和wants声明依赖关系来控制服务启动顺序;sysv init仅见于老旧定制版,依赖/rc.d/rc3.d/下s编号软链接调整,须避开s01kmod与s99local范围。

在麒麟操作系统中调整开机启动顺序,是为了让特定服务或程序在系统启动时按需优先加载或延后运行,避免因依赖关系错误导致服务失败。
确认当前启动管理器类型
麒麟系统(V10 SP1及以后版本)默认使用systemd,但部分旧版或定制镜像可能仍基于SysV init。先执行命令判断:
执行 systemctl list-unit-files --type=service | head -5,若返回结果含大量 .service 文件且状态为 enabled/disabled,则确认为 systemd 管理;若提示 Command 'systemctl' not found 或输出以 /etc/init.d/ 开头的脚本列表,则为 SysV init。
这一步不可跳过——用错配置方法会导致 systemctl enable 失败或 chkconfig 不生效。
systemd 系统修改服务启动顺序
适用于绝大多数麒麟桌面版与服务器版(V10 SP1+)。核心是通过单元文件中的启动依赖和排序控制实现。
第一步:查看目标服务的单元文件位置,执行 systemctl show -p FragmentPath 【服务名】.service,例如 systemctl show -p FragmentPath nginx.service。若返回空,说明该服务未安装或未注册为 systemd 单元。
第二步:编辑服务单元文件,执行 sudo systemctl edit 【服务名】.service。该命令会自动创建覆盖片段(override.conf),避免直接修改原始文件导致升级被覆盖。
第三步:在打开的编辑器中输入依赖关系,例如让 mysql 在 network-online.target 之后、redis 之前启动:
[Unit]
After=network-online.target
Before=redis-server.service
Wants=network-online.target
注意:After/Before 仅声明顺序,不自动建立依赖;Wants 才真正拉起前置服务。漏写 Wants 可能导致 network-online.target 未就绪时 mysql 就开始启动而连接失败。
SysV init 系统调整启动顺序(较少见)
仅存在于部分老旧麒麟定制版或精简镜像中,依赖 /etc/rc.d/ 下的符号链接编号控制顺序。
方法一:使用 chkconfig(如已安装)
执行 sudo chkconfig --list | grep 【服务名】 查看当前运行级状态;再执行 sudo chkconfig --level 35 【服务名】 on 启用,并通过重命名 /etc/rc.d/rc3.d/ 下的 S 开头链接手动调整数字前缀(如将 S20mysqld 改为 S15mysqld 表示更早启动)。
方法二:手动重链接(更直接)
进入 cd /etc/rc.d/rc3.d/ → 找到对应服务的软链接(如 S99myapp)→ 执行 sudo ln -sf ../init.d/myapp S10myapp → 删除原链接 sudo rm S99myapp。
⚠️关键提醒:修改 rc3.d 中的编号时,必须确保新编号不与其他服务冲突,且不能低于 S01kmod(内核模块加载)或高于 S99local(本地自定义脚本),否则可能引发启动卡死。











