如果我想启动系统安装的服务,我可以这样做:
# /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
从功能上来说,这些调用方法没有区别。
start
和stop
是指向 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 的更多信息,请参阅: