如何启用或禁用服务?

NES*_*NES 885 upstart services

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

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

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

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

您能否提供一个简短的分步示例,说明如何在 Ubuntu 中添加服务并启用和禁用它?

Lui*_*ado 922

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

对于终端,您有多种选择。首先,打开一个终端(例如,在破折号中输入“终端”,然后打开它)。然后:

临时启用/禁用服务

暂时停止和启动服务(不为将来的启动启用/禁用它们),您可以键入service SERVICE_NAME [action]. 例如:

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

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

  • service apache2 status (会告诉您服务的状态,如果它是启用/运行或禁用/未运行。)。

  • sudo service apache2 restart(将重新启动服务。这在您更改配置文件时最常用。在这种情况下,如果您更改了 PHP 配置或 Apache 配置。重新启动将使您不必使用 2 个命令行停止/启动)

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


系统数据

从 Ubuntu 15.04 开始,Upstart 将被弃用,取而代之的是 Systemd。使用 Systemd 来管理服务,我们可以执行以下操作(通过systemctl action SERVICE模式):

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- 这将告诉我们转换后的服务是否正在运行。请注意,不推荐使用start, stop, status& restart。它还会告诉我们服务是否尚未转换为新贵:

转换后的服务通常会输出当前状态(正在启动、正在运行、正在停止...)和进程 ID。未转换的服务会给出关于未知作业的错误。

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

  • 开始-sudo start mysql

  • 停止-sudo stop mysql

  • 重启-sudo restart mysql

  • 状态-sudo status smbd

启用/禁用服务

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

echo manual | sudo tee /etc/init/SERVICE.override
Run Code Online (Sandbox Code Playgroud)

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

echo manual | sudo tee /etc/init/mysql.override
Run Code Online (Sandbox Code Playgroud)

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

sudo rm /etc/init/mysql.override
Run Code Online (Sandbox Code Playgroud)

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

  • .override 文件是否需要放在/etc/init.d/,即服务所在的位置? (4认同)

Spa*_*apS 368

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

系统V

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

此命令使用一些稍微复杂的逻辑在 中创建符号链接/etc/rc#.d,以控制启动服务的顺序。如果您运行,ls /etc/rc2.d您可以看到服务将被终止的顺序,其文件名类似于K##xxxx并以文件名开头S##xxxx。将##S##xxxx手段“开始预约”服务xxxx。相反,##inK##xxxx表示 service 的终止命令xxxx

SysV 的一个主要问题是,在启动系统时,一切都必须以串行方式完成,一件又一件,这使得系统启动时间非常缓慢。已尝试将其并行化,但它们是随意且难以充分利用的。这是创建Upstart 的主要原因。

暴发户

Upstart 使用作业定义文件/etc/init来定义应该启动服务的事件。因此,在系统启动时,upstart 处理各种事件,然后可以并行启动多个服务。这允许他们充分利用系统资源,例如,在另一个受 CPU 限制的服务运行时启动磁盘绑定服务,或者在网络等待分配动态 IP 地址时启动。

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

让我就此打住说,如果您不知道什么是服务,或者它的作用是什么,请不要禁用它!

并非所有服务都已转换为新贵。过去几个月在 Canonical 的服务器团队工作时,我处理了许多转换后的作业文件,最好的部分是它允许人们摆脱所有脚本“魔法”,只需放入一个很少有命令可以准确定义如何启动服务,仅此而已。但就目前而言,只有少数传统网络服务(如squidsamba)被转换。

是否基于服务新贵?

为了确定服务是否基于 upstart,您可以运行 status 命令:

status servicename
Run Code Online (Sandbox Code Playgroud)

如果是新贵的工作,它会显示:

$ status statd
statd start/running, process 942
Run Code Online (Sandbox Code Playgroud)

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

$ status apache2
status: Unknown job: apache2
Run Code Online (Sandbox Code Playgroud)

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

sudo update-rc.d apache2 disable
sudo service apache2 stop
Run Code Online (Sandbox Code Playgroud)

在新贵中禁用服务(工作)

新贵工作定义没有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
Run Code Online (Sandbox Code Playgroud)

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

sudo service smbd stop
Run Code Online (Sandbox Code Playgroud)

但是,如果您永远不想启动samba,我建议您实际删除该软件包。但是,如果您希望安装它但无法启动,您还可以执行以下操作:

mv /etc/init/smbd.conf /etc/init/smbd.conf.disabled
Run Code Online (Sandbox Code Playgroud)

使用 start/stop 节禁用服务(截至 11.04)

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

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

# command from root shell
echo manual >> /etc/init/mysql.override
Run Code Online (Sandbox Code Playgroud)

您可以创建一个override文件来禁用服务,而无需编辑作业定义,只需将manual关键字放入其中即可。

  • 看起来 11.04 也有覆盖。所以`echo manual &gt;&gt; /etc/init/&lt;service&gt;.override` 是首选,因为它使原始的 .conf filke 完好无损。不管怎样,这样一个基本的启用/禁用需要 3 年的时间来开发,而且没有 GUI,这仍然是一种耻辱。 (20认同)
  • *update-rc.d* 才是真正重要的 (3认同)
  • 似乎比原始问题发布者标记为最终答案的答案更能处理原始主题。谢谢!:) (3认同)

ate*_*enz 131

sysv-rc-conf

尝试使用sysv-rc-conf

sudo apt-get install sysv-rc-conf
Run Code Online (Sandbox Code Playgroud)

并开始管理服务,执行

sudo sysv-rc-conf
Run Code Online (Sandbox Code Playgroud)

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

在此处输入图片说明

您可以使用Ctrl+nfor next page 和Ctrl+pfor previous page进一步浏览页面。您可以通过选择SPACE所需的运行级别来启用和禁用服务。

工作-管理员

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

sudo apt-get install jobs-admin
Run Code Online (Sandbox Code Playgroud)

它还提供这样的 GUI

作业管理员预览

要显示更多作业,您必须从其菜单中勾选“显示受保护的作业”

配置文件

第三个选项是chkconfig

sudo apt-get install chkconfig
Run Code Online (Sandbox Code Playgroud)

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

可以使用打开服务

chkconfig <service> on
Run Code Online (Sandbox Code Playgroud)

可以使用关闭服务

chkconfig <service> off
Run Code Online (Sandbox Code Playgroud)

我们甚至可以添加我们自己的服务,使用具有适当标题的适当 init 脚本。

chkconfig --add <service>
Run Code Online (Sandbox Code Playgroud)

更新-rc.d

另一个选项可以参考这里 update-rc.d这里简要解释一下。

请注意,对于 Ubuntu Server 12.04,update-rc.d 使用 chkconfig 代替。

  • sysv-rc-conf 不适合与 upstart 或 systemd 一起使用,它显然仅适用于旧的 System 5 rc 系统,该系统已近十年来一直不是 Ubuntu Linux 的默认设置。Debian Bug #791689 承认这一点并质疑为什么它没有被标记为与 systemd 冲突。 (5认同)

j-g*_*tus 50

对于我们这些通过 ssh 运行 Ubuntu 的人,我认为最好的选择是rcconf- 基于文本的程序:

sudo apt-get install rcconf
sudo rcconf
Run Code Online (Sandbox Code Playgroud)

替代文字

使用 Tab 键和箭头键导航,按空格键启用/禁用。更改在重新启动后是持久的。

这篇博文中借用的屏幕截图,其中还显示sysv-rc-conf了一个类似的工具,它也可以让您设置运行级别。(对于那些碰巧足够关心运行级别并希望更改它们的人:)

不幸的是,rcconf 不适用于 upstart(在 中列出的服务/etc/init/*),仅适用于传统机制(ls -l /etc/init.d/*- 不是符号链接的那些)。

幸运的是,许多与服务器(Apache、Tomcat、mdadm、boinc-client...)相关的服务还没有转移到新贵。

  • 这仍然适用于新贵吗? (6认同)
  • 抱歉不行。但它适用于我想要改变的所有情况 - 新贵的工作似乎主要是我不想禁用的东西 - 硬件时钟、日志守护程序、网络等(至少在 Ubuntu 服务器上)。但有一点需要注意(我不是 :),我已经更新了帖子。 (3认同)

Pos*_*aga 19

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


Izz*_*zzy 13

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

通过查看man 5 init会找到更合适的解决方案:使用覆盖配置。简短示例:假设我们有一个名为“foobar”的服务,所以会有一个文件调用/etc/init/foobar.conf它的 upstart 配置。现在您不想删除该文件,也不想修改它——但您也不希望此服务运行?因此,在它旁边放置一个覆盖文件:/etc/init/foobar.override,包含(可选地带有描述的标题和)而不是start on/stop on行,您将一行放置一个单词:manual。通过这种方式,您告诉 upstart 基本上使用foobar.conf,但覆盖启动定义以仅在手动执行时启动该服务(service foobar start在我们的示例中通过)。


Sad*_*adi 9

还有启动管理器

安装: sudo apt-get install bum

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

在此处输入图片说明


小智 6

对我来说最简单的方法是,因为我只使用 CLI update-rc.d

\n\n

要启用或禁用重新启动时自动启动等:

\n\n
sudo update-rc.d <daemon|service> <enable|disable>\n
Run Code Online (Sandbox Code Playgroud)\n\n

例子:

\n\n
update-rc.d spamassassin enable\n
Run Code Online (Sandbox Code Playgroud)\n\n

要停止或启动守护程序或检查其状态:

\n\n
sudo service <daemon|service> <start|stop|restart|reload|force-reload|status>\n
Run Code Online (Sandbox Code Playgroud)\n\n

例子:

\n\n
sudo service spamassassin status\n  spamassassin.service - Perl-based spam filter using text analysis\n   Loaded: loaded (/lib/systemd/system/spamassassin.service; disabled; vendor preset: enabled)\n   Active: active (running) since Thu 2020-05-21 13:04:10 SAST; 4s ago\n  Process: 1928 ExecStart=/usr/sbin/spamd -d --pidfile=/var/run/spamd.pid $OPTIONS (code=exited, status=0/SUCCES\n Main PID: 1949 (spamd)\n    Tasks: 3 (limit: 2361)\n   CGroup: /system.slice/spamassassin.service\n           \xe2\x94\x9c\xe2\x94\x801949 /usr/bin/perl -T -w /usr/sbin/spamd -d --pidfile=/var/run/spamd.pid --create-prefs --max-child\n           \xe2\x94\x9c\xe2\x94\x801951 spamd child\n           \xe2\x94\x94\xe2\x94\x801952 spamd child`  etc  etc\n
Run Code Online (Sandbox Code Playgroud)\n\n

update-rc.d可以比上面显示的基本功能多做一点:

\n\n
usage: update-rc.d [-f] <basename> remove\n       update-rc.d [-f] <basename> defaults\n       update-rc.d [-f] <basename> defaults-disabled\n       update-rc.d <basename> disable|enable [S|2|3|4|5]\n        -f: force\n
Run Code Online (Sandbox Code Playgroud)\n\n

一如既往; 您可以参考联机帮助页。

\n