我读到有关如何在Ubuntu中启用和禁用服务的信息,似乎可以管理它们的可能性也不同。文件夹及其内容。

我发现的另一个是编辑update-rc.d文件夹中的/etc/init.d文件。

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

请问一个简短的防弹示例,逐步介绍如何在Ubuntu中添加服务以及启用和禁用它?

评论

有关联网,请访问:askubuntu.com/questions/230698/…

这对于那些被Fedora 12困住并落在这里的人很有帮助。如果您正在寻找linkrot chkconfig。

请注意,此处仍然缺少Ubuntu 14.04的答案。

@MarcelloNuccio:从Ubuntu 15.04开始,不推荐使用Upstart,而推荐使用Systemd。

自动启动程序在自动启动清单或多个位置的* .service文件以及init.d或crontab中进行配置。请参阅:unix.stackexchange.com/a/525845/43233

#1 楼

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

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

临时启用/禁用服务

要临时停止和启动服务(请勿在将来的启动中启用/禁用它们),可以键入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,它只会提到它缺少一个参数。对于其他服务(例如网络服务),它会提到所有可用选项的一小部分。


SYSTEMD

从Ubuntu 15.04开始,不赞成使用Upstart,而建议使用系统化。使用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),则可以使用以下命令: br />
status SERVICE-这将告诉我们转换后的服务是否正在运行。请注意,不推荐使用startstopstatusrestart。它还会告诉我们服务是否尚未转换为新贵:

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

某些快捷方式仅适用于上面的service命令,但不适用于下面的命令,除非它们已100%转换为新贵服务:


开始-sudo start mysql
停止-sudo stop mysql
重新启动-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

评论


您是否需要向每个命令添加.service? systemctl mongod的状态很好。

– Dan Dascalescu
16 Sep 10'3在3:36

@DanDascalescu不,你不,但我要在那里澄清一下。

–路易斯·阿尔瓦拉多(Luis Alvarado)
16-09-10 22:19

是否应将.override文件放置在/etc/init.d/中,即放置服务的位置?

–欧比湾-PallavJha
16 Dec 9'在10:13

为什么在15.04中弃用了Upstart?在ubuntu 16.04或更高版本中启动/重新启动时运行脚本的正确方法是什么?

– Kamalakannan J
17年1月6日在20:18

感谢您的全面答复。系统化的命令集可在Ubuntu 18.04上使用。

– Doktor J
18-09-24在14:23

#2 楼

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


传统的启动方式Linux中的服务是在/etc/init.d中放置一个脚本,然后使用update-rc.d命令(或在基于RedHat的发行版中,chkconfig)启用或禁用它。在/etc/rc#.d中,控制启动服务的顺序。如果运行ls /etc/rc2.d,您会看到命令将以文件名K##xxxx终止服务,并以文件名S##xxxx开头。 ##中的S##xxxx表示服务xxxx的“开始订单”。相反,##中的K##xxxx意味着服务xxxx的终止命令。

SysV的一个主要问题是,在引导系统时,所有操作都必须串行进行,一件又一件地完成,从而使系统启动时间真的很慢。试图并行化这一点,但是它们是偶然的并且难以充分利用。这是创建Upstart的主要原因。
Upstart

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

通过运行ls /etc/init/*.conf,您可以查看所有暴发户作业文件。禁用它!

并非所有服务都已转换为新贵。在过去几个月中,在Canonical的服务器团队工作时,我已经处理了许多转换后的作业文件,最棒的部分是它使人们可以摆脱所有脚本“魔术”,而只需将其放此处几乎没有几个命令可以确切地定义如何启动服务,仅此而已。但是目前,只有很少的传统网络服务(例如squid和samba)已被转换。

服务是基于新贵的吗?服务是基于新贵的,您可以运行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中禁用服务(作业)

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


来停止它,但是,如果您不想让samba启动,我建议实际上删除软件包。但是,如果要安装但无法启动,则还可以执行以下操作:

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


使用启动/停止节禁用服务(自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


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

评论


看起来11.04也已覆盖。因此,最好使用echo手册>> /etc/init/.override,因为它会使原始的.conf文件完整无缺。无论如何,这样的基本启用/禁用花了3年的时间开发仍然很可惜,并且没有GUI。

–MestreLion
2011年5月27日下午3:09

update-rc.d真正重要的是

– Timofey
2012年12月2日,9:26

与原始问题发布者标记为最终答案的答案相比,似乎更容易理解原始主题。谢谢! :)

–亨宁
14年4月6日在11:11

在我的情况下,文件/etc/init/ssh.conf存在,但是状态ssh和状态sshd都说“未知作业”。这个答案似乎没有解决这种可能性?

– Brian Z
2015年6月7日,下午3:33

status ssh也给我提供“未知工作”,但是service ssh status对我有用

– ptim
16 Mar 27 '16 at 0:57

#3 楼

sysv-rc-conf

尝试使用sysv-rc-conf

sudo apt-get install sysv-rc-conf


并开始管理服务,执行

sudo sysv-rc-conf


将弹出这样的交互式窗口



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

Jobs-Admin

另一种选择是通过

安装的Jobs-Admin。
sudo apt-get install jobs-admin


还提供了类似这样的GUI



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

chkconfig

第三个选项是chkconfig,

sudo apt-get install chkconfig


它可以通过CLI SPACE使用,显示列表
我们还可以使用chkconfig查看系统服务

可以使用

chkconfig <service> on


服务打开服务可以使用

chkconfig <service> off



关闭,我们甚至可以使用带有适当标题的适当init脚本添加自己的服务。 br />
update-rc.d

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

请注意,对于Ubuntu Server 12.04,使用chkconfig –list而不是chkconfig。

评论


在ubuntu服务器上:软件包chkconfig不可用,但由另一个软件包引用。

–出售
13年4月22日在13:16

@pwned您可以自由编辑和发布有关服务器版本的更新信息。谢谢。

– atenz
13-4-26在14:53

我按照您的建议做了,现在可以进行同行评审了。

–出售
13年4月26日在16:44

jobs-admin不允许更改工作(Ubuntu 14.04),而是生成崩溃报告;-)

– Sadi
2014年5月20日下午14:38

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

– JdeBP
2015年11月17日在9:41



#4 楼

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

sudo apt-get install rcconf
sudo rcconf




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

从此博文中借用的屏幕截图也显示了sysv-rc-conf-类似的工具,该工具也可以让您设置运行级别。 (对于那些恰好关心运行级别以希望更改它们的人:)

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

幸运的是,在ssh插入服务器时,许多相关的服务(Apache,Tomcat,mdadm,boinc-client ...)都没有被转移到新贵了。

评论


这仍然适用于新贵吗?

– oKtosiTe
2011年1月6日在20:18

抱歉不行。但这在我想更改的所有情况下都有效-新贵的工作似乎主要是我永远不想禁用的事情-硬件时钟,日志守护程序,网络等(至少在Ubuntu服务器上)。但是有一点要注意(我不是:),我已经更新了帖子。

– j-g-faustus
2011年1月6日在20:59

不幸的是,mysql被转换为新贵。那就是我仅在执行某些项目时使用的服务。

–MestreLion
2011年5月27日,下午3:12

Ubuntu 12.04上的rcconf有一个错误,阻止该程序启动。要解决此问题,您需要安装对话框包。

– devius
2012年6月2日22:08

自从编写了此答案以来,update-rc.d已更改,并且某些不赞成使用的功能已删除。 Debian错误#727735指出rcconf并未更改为匹配。而且,rcconf也不能与systemd一起使用,因此在过去十年中不适用于Ubuntu Linux的任何默认初始化系统。

– JdeBP
15年11月17日在9:35

#5 楼

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



Jobs-Admin

sudo apt-get install jobs-admin




评论


但这太简单了,不允许更改“受保护的作业”(那是jobbs?Apple有Jobs,操作系统有守护进程!)

– kakaz
13年12月19日在20:06

我什至不允许更改“不受保护的作业”(Ubuntu 14.04),而是生成崩溃报告;-)

– Sadi
2014年5月20日14:37

#6 楼

编辑现有的新贵配置文件(如上所述)不是一个好主意。更新的软件包可以提供更新的配置,而您不得不一遍又一遍地重复更改。简短示例:假设我们有一个名为“ foobar”的服务,那么将有一个名为man 5 init的文件,其配置为新贵。现在,您不想删除该文件,也不想对其进行修改,但是您既不想运行该服务,又不想?因此,在其旁边放置一个替代文件:/etc/init/foobar.conf,其中包含(可选的带有说明的标头和)标头行,而不是/etc/init/foobar.override / start on行,而是放置一个带有单词的行:stop on。这样,您可以告诉upstart基本上使用manual,但是可以覆盖启动定义,以仅在手动执行时(通过本示例中的foobar.conf)启动该服务。

#7 楼

还有一个启动管理器。

要安装:sudo apt-get install bum

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



评论


不要忘记检查“高级”按钮。

–not2qubit
16年4月4日在2:10

#8 楼

我使用Stacer。
它还显示服务和流程。完整的GUI系统工具箱。
https://github.com/oguzhaninan/Stacer

#9 楼

对我来说,最简单的方法是仅使用CLI,这是update-rc.d。要启用或禁用重新启动时的自动启动功能,例如:

sudo update-rc.d <daemon|service> <enable|disable>


示例:

update-rc.d spamassassin enable


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

sudo service <daemon|service> <start|stop|restart|reload|force-reload|status>


示例:

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


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

usage: update-rc.d [-f] <basename> remove
       update-rc.d [-f] <basename> defaults
       update-rc.d [-f] <basename> defaults-disabled
       update-rc.d <basename> disable|enable [S|2|3|4|5]
        -f: force


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