如何启用或禁用服务?

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

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

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

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

你能给一个简短的防弹一步一步的例子,如何在Ubuntu中添加一个服务并启用和禁用它吗?

有些服务可以使用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:在这种情况下,由于您没有提到为服务执行的操作,因此它将向您显示该特定服务可用的所有选项。 这个方面因服务而异,例如,对于MySQL,它只会提到它缺少一个参数。 对于其他服务,如网络服务,它会提到所有可用选项的小列表。

系统d

从Ubuntu15.04开始,Upstart将被弃用,转而支持Systemd。 使用Systemd来管理服务,我们可以执行以下操作(通过 systemctl action SERVICE 模式):

  • sudo systemctl start SERVICE:使用它来启动服务。 重启后不持久
  • sudo systemctl stop SERVICE:用它来停止服务。 重启后不持久
  • sudo systemctl restart SERVICE:使用它重新启动服务
  • sudo systemctl reload SERVICE:如果服务支持它,它将重新加载与其相关的配置文件,而不会中断使用该服务的任何进程。
  • systemctl status SERVICE:显示服务的状态。 告诉服务当前是否正在运行。
  • sudo systemctl enable SERVICE:在下次重新启动或下次启动事件时打开服务。 重新启动后它仍然存在。
  • sudo systemctl disable SERVICE:在下次重新启动或next stop事件时关闭服务。 重新启动后它仍然存在。
  • systemctl is-enabled SERVICE:检查服务当前是否配置为在下次重新启动时启动或不启动。
  • systemctl is-active SERVICE:检查服务当前是否处于活动状态。
  • systemctl show SERVICE:显示有关服务的所有信息。
  • sudo systemctl mask SERVICE:通过将其链接到完全禁用服务 /dev/null;您无法手动启动服务或启用服务。
  • sudo systemctl unmask SERVICE:删除链接到 /dev/null 并恢复启用和/或手动启动服务的能力。

新贵(自15.04起弃用)

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

status SERVICE -这将告诉我们转换后的服务是否正在运行。 请注意,这是不赞成的 start, stop, status &安培; restart. 它还会告诉我们服务是否尚未转换为新贵:

转换后的服务通常会输出当前状态(启动、运行、停止)。..)和进程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.

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

系统/系统

在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.

一个主要问题 系统/系统 启动系统的时候是这样吗?, 一切都必须以串行方式完成,一件又一件,这使得系统启动时间非常缓慢. 有人试图将此并行化,但它们是随意的,很难充分利用。 这是主要的原因 新贵 是被创造出来的。

新贵

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

您可以通过运行以下命令查看所有upstart作业文件 ls /etc/init/*.conf

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

并非所有服务都已转换为新贵。 在过去的几个月里,我在Canonical的服务器团队工作,我已经处理了许多转换后的作业文件,最好的部分是它允许人们摆脱所有脚本"魔术",只需在这里和那里放入一些命令来定义如何启动服务,仅此而已。 但就目前而言,只有少数传统的网络服务,如 鱿鱼桑巴舞,已被转换。

是一个服务新贵为基础?

为了弄清楚一个服务是否是基于upstart的,你可以运行status命令:

status servicename

如果是一个 新贵 工作,它会显示这一点:

$ status statdstatd start/running, process 942

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

$ status apache2status: Unknown job: apache2

在这种情况下, apache2 尚未转换为 新贵. 所以,要禁用 apache2 你就跑吧

sudo update-rc.d apache2 disablesudo service apache2 stop

在upstart中禁用服务(作业)

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

如果你想仍然能够手动启动它,那么你需要注释掉 start on 条件。 说要安装 桑巴舞,但没有它自动启动。 这是作业文件(在natty中):

description "SMB/CIFS File Server"author      "Steve Langasek <steve.langasek@ubuntu.com>"start on local-filesystemsstop on runlevel [!2345]respawnpre-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/sambaend scriptexec smbd -F

禁用 桑巴舞,你可以把一个 # 在"start on local-filesystems". 请注意,虽然它不会在启动时启动备份,但这次您仍然需要停止它

sudo service smbd stop

但是,如果你永远不想要 桑巴舞 首先,我建议实际删除包。 但是,如果你想安装它,但不能启动,你也可以这样做:

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 shellecho manual >> /etc/init/mysql.override

您可以创建一个 override 文件来禁用服务,而无需编辑作业定义,只需将 manual 关键词在里面。

sysv-rc-conf

尝试使用 sysv-rc-conf

sudo apt-get install sysv-rc-conf

并开始管理服务,执行

sudo sysv-rc-conf

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

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

职位-行政

另一种选择是 职位-行政 通过安装通过

sudo apt-get install jobs-admin

它也提供像这样的GUI

要显示更多的工作,你必须勾选 显示受保护的工作 从它的菜单。

chkconfig

第三种选择是 chkconfig,

sudo apt-get install chkconfig

它可以通过CLI使用 chkconfig,显示开/关工作列表。我们也可以使用 chkconfig –list

服务可以使用打开

chkconfig <service> on

服务可以使用关闭

chkconfig <service> off

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

chkconfig --add <service>

更新-rc。d

另一种选择可以参考 这里更新-rc。d ,简要解释 这里.

请注意,对于Ubuntu Server12.04, update-rc.d 被用来代替chkconfig。

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

sudo apt-get install rcconfsudo rcconf

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

从借来的截图 这篇博客文章,这也表明 sysv-rc-conf -一个类似的工具,也可以让你设置运行级别。 (对于那些碰巧足够关心runlevels希望改变它们的人:)

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

幸运的是,当ssh登录到服务器(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 在我们的例子中)。

还有 启动管理器.

要安装: sudo apt-get install bum

进一步资料: http://www.marzocca.net/linux/bum.html

对我来说最简单的方法,因为我只使用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

一如既往;你可以参考 手册页.

我用 斯塔克:

Stacer是一个开源系统优化器和应用程序监视器,可帮助用户管理具有不同方面的整个系统,它是一个一体化系统实用程序。

它还显示了服务和流程。 一个完整的GUI系统工具箱。

请注意,这里仍然缺少Ubuntu14.04的答案。

@MarcelloNuccio:从Ubuntu15.04开始,Upstart已被弃用,转而支持Systemd。

有关网络,请参阅:How to restart the networking service? - Ask Ubuntu

[这个](http://ryuslash.wordpress.com/2009/12/31/enablingdisabling-services-in-fedora-12/)对于那些被困在Fedora12上并降落在这里的人会有所帮助。 如果linkrot’chkconfig’是你要找的。

自动启动程序在"autostart"清单或"*"中配置。服务’文件在几个位置,以及在’init。d’或’crontab’。 见:upstart - How to start application after login on CentOS? - Unix & Linux Stack Exchange