麒麟系统关机或重启卡在“A stop job is running for…”本质是systemd等待某单元退出超时,最有效解法是修改/etc/systemd/system.conf中DefaultTimeoutStopSec=10s和DefaultTimeoutStartSec=10s,并执行systemctl daemon-reload生效;同时可定位并mask问题单元(如rc-local.service)或清理rc.local残留脚本。

麒麟系统开机卡在“A stop job is running for…”提示,本质是systemd在关机或重启阶段等待某个服务/挂载点/兼容性单元彻底退出,而该单元因进程阻塞、资源未释放或脚本无响应,导致默认超时长达90秒甚至无限制,拖慢整个关机与重启流程。
修改systemd全局超时参数
这是最直接有效的解决方式,适用于所有由systemd管理的stop job卡顿问题。
第一步:用root权限编辑systemd主配置文件:sudo nano /etc/systemd/system.conf。
第二步:找到DefaultTimeoutStopSec=这一行,将其值改为10s;若该行被注释(开头为#),需先删掉#再修改;若整行不存在,则在[Manager]段落末尾手动添加DefaultTimeoutStopSec=10s。
第三步:确认DefaultTimeoutStartSec=也设为10s(避免启动阶段同类问题复发)。
第四步:保存退出后立即执行sudo systemctl daemon-reload,使新配置生效。这一步【必须执行,否则修改无效】。
定位并禁用具体卡住的单元
当某项服务反复触发stop job(如rc-local、mnt-usb.mount、bluetooth.service),仅调超时治标不治本,应精准屏蔽问题源。
方法一:查看当前卡住的单元名称
重启前进入TTY(Ctrl+Alt+F2),登录后运行:systemctl list-jobs,重点关注状态为“running”且类型为“stop”的条目,记下其完整单元名(如rc-local.service或mnt-external.mount)。
方法二:禁用或屏蔽该单元
若确认该单元非必要(如旧版rc.local兼容服务),执行:sudo systemctl mask rc-local.service。mask操作会创建指向/dev/null的硬链接,彻底阻止systemd加载和停止它。
方法三:对挂载点类单元单独处理
若卡在A stop job is running for /mnt/data,说明对应mount单元未正常卸载。先检查是否还有进程占用:sudo lsof +D /mnt/data;若有,终止后执行:sudo systemctl stop mnt-data.mount && sudo systemctl disable mnt-data.mount。
清理rc.local残留导致的兼容性卡顿
银河麒麟部分版本仍启用/etc/rc.d/rc.local兼容机制,但其中脚本若含后台进程、网络等待或无exit语句,关机时就会卡在“A stop job is running for /etc/rc.d/rc.local compatibility”。
打开rc.local文件:sudo nano /etc/rc.d/rc.local,检查末尾是否有exit 0;若无,补上——缺少此行会导致systemd误判脚本未结束。
检查文件内是否启动了守护进程(如nohup ./myapp &),这类进程不会随关机自动退出。应改用systemd service方式管理,或在关机前通过ExecStop=明确终止。
若rc.local已无实际用途,直接禁用兼容服务:sudo systemctl disable rc-local.service→sudo systemctl mask rc-local.service。











