当前位置: 首页>>技术教程>>正文


如何启用或禁用服务?

, ,

问题描述

我阅读了关于如何在Ubuntu中启用和禁用服务,似乎有不同的可能性来管理它们。

我找到的第一个方法是update-rc.d,用于向启动添加新服务,该服务针对/etc/init.d文件夹及其内容。

另一个我发现是编辑/etc/init文件夹中的.conf文件。

推荐/禁用/添加服务的方式是什么?为什么?

您能否简单介绍一下如何在Ubuntu中添加服务并启用和禁用它?

最佳解决方法

有些服务可以使用GUI(如startup应用程序)或终端启用/禁用。

对于终端你有几个选择。首先,打开一个终端(例如,在短划线中输入”terminal”,然后打开它)。然后:

临时启用/禁用服务

要暂时停止和启动服务(不为未来的启动启用/禁用它们),您可以键入service SERVICE_NAME。例如:

  • sudo service apache2 stop(将停止Apache服务,直到重新启动或直到您再次启动它)。

  • sudo service apache2 start(将启动Apache服务假定之前已停止)。

  • service apache2 status(会告诉你服务的状态,如果它启用/正在运行已禁用/未运行。)。

  • sudo service apache2 restart(将重新启动服务,当你修改了一个配置文件时,这是最常用的,在这种情况下,如果你改变了PHP配置或Apache配置,重新启动将使你无需停止/启动2命令行)

  • service apache2(在这种情况下,由于您没有提到执行该服务的ACTION,它会显示出可用于该特定服务的所有选项。)此方面因服务而异,例如,使用MySQL时,它只会提及它缺少一个参数。对于网络服务等其他服务,它会提及所有可用选项的小列表。


SYSTEMD

从Ubuntu 15.04开始,Upstart将被弃用,以支持Systemd。借助Systemd来管理服务,我们可以执行以下操作:

systemctl start SERVICE – 用它来启动服务。重启后不会持续

systemctl stop SERVICE – 用它来停止服务。重启后不会持续

systemctl restart SERVICE – 使用它重新启动服务

systemctl reload SERVICE – 如果服务支持它,它将重新加载与其相关的配置文件,而不会中断正在使用该服务的任何进程。

systemctl status SERVICE – 显示服务的状态。告诉服务是否正在运行。

systemctl enable SERVICE – 在下一次重新启动或下一次启动事件时打开服务。它在重新启动后仍然存在。

systemctl disable SERVICE – 在下次重新启动或下一次停止事件时关闭该服务。它在重新启动后仍然存在。

systemctl is-enabled SERVICE – 检查服务当前是否配置为在下次重新启动时启动或不启动。

systemctl is-active SERVICE – 检查服务当前是否处于活动状态。

systemctl show SERVICE – 显示有关该服务的所有信息。

sudo systemctl mask SERVICE – 通过将服务链接到/dev/null完全禁用服务;您无法手动启动服务或启用该服务。

sudo systemctl unmask SERVICE – 删除指向/dev/null的链接,并恢复启用和/或手动启动服务的功能。


UPSTART(自15.04起弃用)

如果我们想使用官方的Upstart方式(请注意,目前,并非所有服务都已转换为Upstart),我们可以使用以下命令:

status SERVICE – 这会告诉我们转换的服务是否正在运行。请注意,这是不赞成startstopstatus& restart。它还会告诉我们一项服务是否尚未转化为新贵:

转换的服务通常会输出当前状态(启动,运行,停止…)和进程ID。未经转换的服务会给出未知作业的错误。

有些快捷方式可能只适用于上面的service命令,但不能与下面的命令一起使用,除非它们100%转换为upstart服务:

  • 开始 – sudo start mysql

  • STOP – sudo stop mysql

  • RESTART – sudo restart mysql

  • 状态 – sudo status smbd

启用/禁用服务

要启动或停止服务,您需要:

echo manual | sudo tee /etc/init/SERVICE.override

manual将停止Upstart在下次启动时自动加载服务。任何.override结尾的服务将优先于原始服务文件。之后您只能手动启动服务。如果你不想要这个,那么简单地删除.override。例如:

echo manual | sudo tee /etc/init/mysql.override

将MySQL服务置于manual模式。如果你不想要这个,之后你可以简单地做

sudo rm /etc/init/mysql.override

并重新启动服务以再次自动启动。当然要启用一项服务,最常见的方法就是安装它。如果你安装了Apache,Nginx,MySQL或其他,它们会在完成安装后自动启动,并在每次启动计算机时启动。如上所述,禁用将使用服务manual

次佳解决方法

目前,在Ubuntu,SysV,Upstart和systemd中,软件实际上有三种不同的启动方式。服务在这里定义为由系统在后台运行的程序,而不是由用户直接启动和运行的程序。

SysV

在Linux中启动服务的传统方式是在/etc/init.d中放置脚本,然后使用update-rc.d命令(或基于RedHat的发行版chkconfig)启用或禁用它。

该命令使用一些稍微复杂的逻辑在/etc/rc#.d中创建符号链接,该链接控制启动服务的顺序。如果运行ls /etc/rc2.d,则可以看到命令将使用文件名K##xxxx来处理服务,并以文件名S##xxxx开始。 S##xxxx中的##表示服务xxxx的”start order”。相反,K##xxxx中的##表示服务xxxx的终止订单。

SysV的一个主要问题是启动系统时,everything had to be done in serial, one thing after another, making system boot times really slow。试图将其并行化,但它们杂乱无章,难以充分利用。这是Upstart创建的主要原因。

Upstart

Upstart使用/etc/init中的作业定义文件来定义应启动服务的事件。因此,在系统启动时,新贵会处理各种事件,然后可以并行启动多个服务。这使他们能够充分利用系统的资源,例如,在另一个CPU-bound服务运行时启动disk-bound服务,或者在网络正在等待分配动态IP地址时启动disk-bound服务。

您可以通过运行ls /etc/init/*.conf来查看所有暴发的作业文件

让我停下来说,如果你不知道服务是什么,或者它做了什么,不要禁用它!

并非所有服务都已转换为新贵。在过去的几个月中,在Canonical的服务器团队中工作时,我已经处理了大量转换后的作业文件,最好的部分是它允许摆脱所有脚本”magic”,并只需输入几个命令在这里和那里准确地定义如何启动服务,仅此而已。但目前,只有少数传统的网络服务,如squid和samba已经被转换。

是服务upstart-based?

为了确定服务是否为upstart-based,可以运行status命令:

status servicename

如果这是一个暴发户的工作,它会显示这一点:

$ status statd
statd start/running, process 942

但如果不是,你会看到更像这样的东西:

$ status apache2
status: Unknown job: apache2

在这种情况下,apache2尚未转化为新贵。因此,要禁用apache2,您只需运行

sudo update-rc.d apache2 disable
sudo service apache2 stop

新贵禁用服务(工作)

Upstart作业定义没有update-rc.d命令。要禁用该作业,您需要直接编辑该作业文件以禁用该作业。有两种方法可以做到这一点。

如果您仍想手动启动它,则需要注释start on条件。假设您想要安装samba,但没有自动启动。这是工作档案(纳蒂):

description "SMB/CIFS File Server"
author      "Steve Langasek <steve.langasek@ubuntu.com>"

start on local-filesystems
stop on runlevel [!2345]

respawn

pre-start script
    RUN_MODE="daemons"

    [ -r /etc/default/samba ] && . /etc/default/samba

    [ "$RUN_MODE" = inetd ] && { stop; exit 0; }

    install -o root -g root -m 755 -d /var/run/samba
end script

exec smbd -F

要禁用samba,只需将#放在“start on local-filesystems”的前面即可。请注意,虽然它不会在启动时重新启动,但这次您仍然需要停止它

sudo service smbd stop

但是,如果你不想让桑巴开始,我会建议实际上删除这个包。但是,如果您希望安装它,但无法启动,还可以执行以下操作:

mv /etc/init/smbd.conf /etc/init/smbd.conf.disabled

使用开始/停止节停用服务(截至11.04)

从11.04版本的新贵开始,会有一个新的关键字禁用start onstop on节:manual。因此,另一种禁用11.04服务的方法是:

echo 'manual' | sudo tee /etc/init/mysql.override

# command from root shell
echo manual >> /etc/init/mysql.override

只需放入manual关键字,就可以创建override文件来禁用服务,而无需编辑作业定义。

第三种解决方法

sysv-rc-conf

尝试使用sysv-rc-conf

sudo apt-get install sysv-rc-conf

并开始管理服务,执行

sudo sysv-rc-conf

这将带来这样的交互式窗口

upstart,services,ubuntu

您可以使用下一页的Ctrl+n和上一页的Ctrl+p进一步浏览页面。您可以通过在所需运行级别上选择SPACE来启用和禁用服务。

Jobs-Admin

另一种替代方案是通过安装通过Jobs-Admin

sudo apt-get install jobs-admin

其中也提供了这样的GUI

upstart,services,ubuntu

为了显示更多作业,您必须在其菜单中勾选显示受保护的作业。

chkconfig

第三个选项是chkconfig,

sudo apt-get install chkconfig

它可以通过CLI chkconfig使用,显示开/关作业列表。我们也可以使用chkconfig –list查看系统服务

服务可以打开使用

chkconfig <service> on

服务可以使用关闭

chkconfig <service> off

我们甚至可以添加我们自己的服务,使用正确的init脚本和正确的标题。

chkconfig --add <service>

update-rc.d

另一个选项可以参考here update-rc.d,简要解释为Chkconfig替代Ubuntu服务器?

请注意,对于Ubuntu Server 12.04,update-rc.d is used instead of chkconfig.

第四种方法

对于那些通过ssh运行Ubuntu的人,我认为最好的选择是rcconf–一个基于文本的程序:

sudo apt-get install rcconf
sudo rcconf

upstart,services,ubuntu

使用选项卡和箭头键导航,按空格键启用/禁用。更改在重新启动时保持不变。

this blogpost借用的屏幕截图,也显示了sysv-rc-conf – 一个类似的工具,可以让你设置运行级别。 (对于那些碰巧关心运行级别的人,希望改变它们:)

不幸的是,刚刚使用传统机制(ls -l /etc/init.d/*–不是符号链接),rcconf不适用于新贵(/etc/init/*中列出的服务)。

幸运的是,当ssh-ing进入服务器(Apache,Tomcat,mdadm,boinc-client …)时,许多与这些服务相关的服务尚未转移到新贵上。

第五种方法

我发现有这个GUI工具,像BUM,但与Upstart兼容:

  • Jobs-Admin

    sudo apt-get install jobs-admin
    

第六种方法

编辑现有的upstart配置文件(如上所述)并不是一个好主意。更新后的软件包可以提供更新的配置,并且您不得不一遍又一遍地重复更改。

通过查看man 5 init,可以找到更合适的解决方案:使用覆盖配置。简单的例子:假设我们有一个名为”foobar”的服务,所以会有一个叫做/etc/init/foobar.conf的文件,它的新配置。现在您不想删除该文件,也不想修改它 – 但是您不希望此服务运行?因此,在它旁边放置覆盖文件:/etc/init/foobar.override,其中包含(可选择带有说明的标题),而不是start on /stop on行,您将一行放在一行中:manual。通过这种方式,您可以立即开始基本使用foobar.conf,但会覆盖启动定义,以便在手动执行时(通过本示例中的service foobar start)启动该服务。

第七种方法

还有Boot-Up管理器。

要安装:sudo apt-get install bum

更多信息:http://www.marzocca.net/linux/bum.html

upstart,services,ubuntu

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/8.html,未经允许,请勿转载。