如何选择启用/禁用、启动/停止或检查服务状态的方式?

Gly*_*yph 7 server startup command-line upstart services

如果我想启动一个系统安装的服务,我可以这样做:

# /etc/init.d/some-svc start
# initctl start some-svc
# service some-svc start
# start some-svc
Run Code Online (Sandbox Code Playgroud)

如果我想禁用启动时运行的服务,我可以这样做:

# rm /etc/rc2.d/S99some-svc
# update-rc.d some-svc disable
# mv /etc/init/some-svc.conf /etc/init/some-svc.conf.disabled
Run Code Online (Sandbox Code Playgroud)

然后我可以做类似的各种事情来启用启动时启动的服务,等等。

我知道 upstart 是一个(相对)新事物,我知道 SysV init 过去是如何工作的,而且我隐约知道一堆 D-Bus 废话,但我不知道是人们实际上打算如何与这些东西进行交互的方式。例如,我不知道如何轻松确定服务是 Upstart 作业还是遗留的 SysV 事物,而无需实际广泛阅读其 shell 脚本的源代码。

所以:如果我想立即或永久启动或停止服务,我应该使用哪些工具,为什么?如果答案取决于某个属性(例如“此服务支持新贵”),那么我如何快速轻松地了解已安装软件包的该属性?

相关地,是否有任何用户界面工具可以安全且正确地与现代服务基础设施(新贵,和/或任何其 sysv 兼容性)交互?例如,我能否可靠地使用sysv-rc-conf来确定应该启动哪些服务?

Mar*_*ell 9

在功能上,这些调用方法中的任何一个都没有区别。

start并且stop是 initctl 的符号链接。 service是一个shell脚本,决定是执行init脚本还是使用initctl。

了解什么是 Upstart 工作的最简单方法是查看/etc/init/. 那里的一切都是新贵的工作。如果您ls -l /etc/init.d/会看到每个服务和系统任务。SysV init 作业将是真实文件,而 Upstart 作业将是符号链接/lib/init/upstart-job,可以正确调用 Upstart 作业。

换句话说,您还可以通过调用例如 来调用 Upstart 作业/etc/init.d/apport restart,尽管输出将建议使用 service、start 或 stop 来代替。

所以,在实践中它没有区别(还!)。但是如果我正在编写一些脚本,我肯定会使用服务、启动或停止,因为几乎没有机会被弃用,而通过 /etc/init.d/ 调用服务可能会消失(尽管可能不会在任何时候)很快)。

关于禁用服务的说明:重命名 .conf 文件有效,但我不建议这样做。您可能会以这种方式禁用服务,但如果有可用的软件包升级,dpkg 将复制 Upstart 作业的新副本,并且无意中再次启用您的服务。禁用 Upstart 作业的正确方法是使用.override 文件,该文件使原始作业完好无损。

例如,要禁用 apport,只需创建一个名为/etc/init/apport.override“manual”一词的文件即可。

# echo "manual" > /etc/init/apport.override

就个人而言,我会避免使用sysv-rc-conf. 使用它来修改 SysV 作业可能足够安全,但我不确定;它似乎不支持 Upstart 作业,并且无法从界面中分辨出哪个是哪个。我会坚持update-rc.d管理 SysV 脚本。

有关更多新贵信息,请参阅:

  1. 新贵食谱:http : //upstart.ubuntu.com/cookbook/
  2. 命令man 5 inithttp : //manpages.ubuntu.com/manpages/precise/en/man5/init.5.html