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

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

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

# /etc/init.d/some-svc start
# initctl start some-svc
# service some-svc start
# start some-svc

如果我想禁用某个服务在启动时运行,我可以执行以下操作:

# rm /etc/rc2.d/S99some-svc
# update-rc.d some-svc disable
# mv /etc/init/some-svc.conf /etc/init/some-svc.conf.disabled

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

我知道 upstart 是一个(相对)新的东西,我也知道 SysV init 以前是如何工作的,我也隐约知道一些 D-Bus 的废话,但我不知道人们实际上打算如何与这些东西交互。例如,如果不仔细阅读其 shell 脚本的源代码,我不知道如何轻松确定服务是 Upstart 作业还是遗留的 SysV 事物。

因此:如果我想立即或持续地启动或停止一项服务,可以使用以下哪种工具应该我使用,为什么?如果答案取决于某些属性(如“此服务支持 upstart”),那么我如何快速轻松地了解已安装软件包的该属性?

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

答案1

从功能上来说,这些调用方法没有区别。

startstop是指向 initctl 的符号链接。 service是一个 shell 脚本,用于确定是否执行 init 脚本或使用 initctl。

要了解什么是 Upstart 作业,最简单的方法是查看/etc/init/。其中的所有内容都是 Upstart 作业。如果您,ls -l /etc/init.d/您将看到每个服务和系统任务。SysV init 作业将是真实文件,而 Upstart 作业将是符号链接,/lib/init/upstart-job它将正确调用 Upstart 作业。

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

因此,实际上这并没有什么区别(目前为止!)。但如果我正在编写脚本,我肯定会使用 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 脚本。

有关 Upstart 的更多信息,请参阅:

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

相关内容