12.10中系统服务如何启动?

12.10中系统服务如何启动?

在 Ubuntu 中,有一件事总是让我感到困惑,那就是系统服务是如何启动的。我知道 Ubuntu 使用 Upstart 并支持 SysV,但是哪一个用于启动服务?当您想要“手动”启动服务时,这很重要。

例如,在我的系统上,我在/etc/init.d/<service>(SysV) 和/etc/init/<service>.conf(Upstart) 中都有以下服务的文件:

acpid, mysql, networking, qemu-kvm, ufw, libvirt-bin

因此,如果我想在启动时禁用 MySQL 执行,我必须使用 Upstart 方式或 SysV 方式来禁用它?此外,我如何知道其中哪一个真正用于启动通用服务?

编辑

这里真正令人怀疑的不是如何使用 SysV/Upstart 禁用/启用服务。真正让我困惑的是,一些服务似乎同时在 SysV 和 Upstart 中定义(和启用)。它们之间是否有任何优先顺序(例如,如果mysql在两者中都启用了,则使用 SysV 启动它)?或者可能是一个工具在后台使用另一个工具?

答案1

它很大程度上取决于应用程序及其包装维护者。

人们强烈偏爱 Upstart 脚本,因为它们可以处理事件(这通常是一件好事),但很多应用程序没有足够好的 Upstart 脚本可用,或者应用程序的维护者选择坚持使用默认设置(应用程序或 Debian)。

无论如何,你都必须适应。

  • 对于 Upstart:
    • 将文件重命名为不以 结尾的名称.conf,或者
    • 添加manual到文件中。这将允许您手动加载服务。
  • 对于较旧的服务:

    update-rc.d -f <service> remove
    

如果你有/etc/init.d/某件事的脚本一个/etc/init/脚本并且你想检查 init.d 版本是否仍然有效,你可以使用以下命令进行检查:

ls -l /etc/rc?.d/*<service>

如果您看到大量的符号链接,则它安装在旧的 SysV init 中。

答案2

对于在 SysV 和 upstart 中定义的服务,通常如果您通过 SysV 重新启动它,您会看到类似以下内容:

al@al-mythtv:~$ sudo /etc/init.d/mysql restart
[sudo] password for al: 
Rather than invoking init scripts through /etc/init.d, use the service(8)
utility, e.g. service mysql restart

Since the script you are attempting to invoke has been converted to an
Upstart job, you may also use the stop(8) and then start(8) utilities,
e.g. stop mysql ; start mysql. The restart(8) utility is also available.
mysql stop/waiting
mysql start/running, process 29846

我认为这意味着 Upstart 是这些服务的首选,而 SysV 实现只是一个包装器。

另外,我认为你理解错了目录的意思。/etc/init 是 upstart 配置,/etc/init.d 是 SysV 兼容性,但它只是这些类型服务的 upstart 符号链接。

相关内容