我有一个在启动时通过 /etc/init.d 启动的服务,这会导致启动过程的最后步骤延迟足够长的时间,以便在一切设置正确之前可以通过图形显示管理器登录。
罪魁祸首是netatalk,这是一项我不经常需要的服务。
init 是否支持多层方法来在第二轮中启动某些服务(以及如何启动)?或者我是否必须禁用启动时自动启动并手动或在 rc.local ( /etc/init.d/netatalk start
) 末尾启动服务?
据我所知,只能通过以下方式禁用该服务,/etc/default/netatalk
但也许我错过了一些东西(除了更改 netatalk 初始化脚本本身之外)?
FWIW,我没有运行atalkd
可以在后台启动的旧守护程序(/etc/default/netatalk 中的选项)。
编辑:我忘了提到一个关键细节。这是 Kubuntu 14.04.6 LTS。我知道它不再受支持,但这不是重点,我有理由不升级到全新版本。我保持内核更新,X、Mesa、DRM 驱动程序均已更新,以提供最佳性能,但大多数核心操作系统仍然是 Ubuntu 14.04,其组合upstart
(提供 /sbin/init)有些奇怪,其中部分systemd
功能仅发挥很小的作用据我所知。
/etc/init.d 中的许多脚本在 /etc/init 中都有相应的条目,这肯定是暴发户使用的。
正如下面的讨论中提到的,我调整了 netatalk 初始化脚本,因此如果在 /etc/default/netatalk 中设置了后台选项,它就会在后台启动所有服务。除此之外,我认为我的主要“问题”是我在 /etc/rc.local 中执行的操作应该在任何人登录桌面会话之前完成。据我所知,该脚本总是最后执行,因此我最好的选择似乎不是依赖 init 系统来推迟缓慢启动的服务,而是防止它们自动启动并在后期“手动”启动它们。 /etc/rc.local 的 amble 部分。
所以我的问题是:upstart 是否提供了一种禁用自动启动而不完全禁用服务的方法?
答案1
您的问题是完全可信的,并且您要求在 netatalk 完成启动之前启动图形系统的请求是完全合理的 – 这不是依赖项,并且不应延迟启动图形登录管理器。您的系统应该使您能够尽早开始做您需要做的事情。
这实际上是启动/服务管理器的工作:确保在可能的情况下启动服务,并且仅根据需要激活可以在需要时激活的服务,包括其依赖项。
现在,问题是,您似乎使用的是依赖于 init 脚本的古老 Unixoid 发行版(可能是古老的 linux 发行版?)。并且这些仅支持固定的启动顺序,不支持依赖项或按需激活。
你击中了这关于为什么经典 init 系统需要重新设计的经典论证!
因此,无论您(可能)使用什么 Linux 发行版:您发现了问题;解决方案是使用真正名副其实的启动管理器。不要害羞 – 将您的 Linux 更新为遵循我们在过去 20 年的 Linux 设计中所学到的东西!
您会注意到,当您开始使用普通的普通 debian 时,启动时间会更好(与旧 init 系统的支持者告诉您的“膨胀”非常相反,他们在每个角落都看到了这种情况,但实际上却没有)那里)并且引导过程更容易修改。