rc.local 中的脚本阻止启动系统

rc.local 中的脚本阻止启动系统

遇到了一个奇怪的问题,今天我刚刚把 Ubuntu 从 17.04 升级到 17.10,然后重启系统。但是我的电脑无法进入桌面,似乎是被我的脚本阻止了/etc/rc.local。脚本如下:

sslocal -c /home/kinka/azure.conf

注释掉脚本后,我可以正常进入我的 Ubuntu。此外,在后台运行脚本也可以。

sslocal -c /home/kinka/azure.conf &

我不知道是什么原因导致了这样的变化?

答案1

主要原因是因为它本质上是连续的。

您必须了解的是,它的/etc/rc.local存在是为了与旧的 SysV init 系统兼容,以便启动服务,而 SysV 最初是作为顺序系统开始的,可以追溯到 AT&T Unix 的美好旧时代。正如混乱在他的回答中解释道

SysV 根据文件名中的编号按顺序执行脚本。Systemd 则不然。如果满足依赖性,systemd 会立即运行脚本,而不考虑脚本名称的编号。

第二个原因是它rc.local本身就是一个脚本(注意到这一#!/bin/sh -e行了吗?)。脚本本质上也是连续的,因此如果一个命令尚未完成或尚未进入后台 - 脚本将不得不等待程序 A 完成其繁琐的工作或完全失败,然后才能发生其他任何事情。此外,请注意文件顶部的注释:

# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.

因此,您sslocal -c /home/kinka/azure.conf只是劫持了系统,不让脚本退出并完成系统启动。就是这样。

相关内容