遇到了一个奇怪的问题,今天我刚刚把 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
只是劫持了系统,不让脚本退出并完成系统启动。就是这样。