我读了关于如何在Ubuntu中启用和禁用服务,似乎有不同的可能性来管理它们。
我发现的第一种方法是 update-rc.d
为启动增加新服务,目的是 /etc/init.d
文件夹及其内容。
我发现的另一个是编辑 .conf
文件在 /etc/init
文件夹。
启用/禁用/添加服务的推荐方法是什么?
你能给一个简短的防弹一步一步的例子,如何在Ubuntu中添加一个服务并启用和禁用它吗?
我读了关于如何在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,它只会提到它缺少一个参数。 对于其他服务,如网络服务,它会提到所有可用选项的小列表。从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
并恢复启用和/或手动启动服务的能力。如果我们想使用官方的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
新贵的作业定义没有 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中的upstart版本开始,有一个新的关键字禁用 start on
和 stop 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
sudo apt-get install sysv-rc-conf
并开始管理服务,执行
sudo sysv-rc-conf
这将带来这样的交互式窗口
您可以使用以下方法进一步浏览页面 Ctrl+n
对于下一页和 Ctrl+p
上一页. 您可以通过选择启用和禁用服务 SPACE
在所需的运行水平上。
另一种选择是 职位-行政 通过安装通过
sudo apt-get install jobs-admin
它也提供像这样的GUI
要显示更多的工作,你必须勾选 显示受保护的工作 从它的菜单。
第三种选择是 chkconfig,
sudo apt-get install chkconfig
它可以通过CLI使用 chkconfig
,显示开/关工作列表。我们也可以使用 chkconfig –list
服务可以使用打开
chkconfig <service> on
服务可以使用关闭
chkconfig <service> off
我们甚至可以添加我们自己的服务,使用适当的init脚本和适当的标题。
chkconfig --add <service>
请注意,对于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)时,许多服务都是相关的。..)还没有被转移到新贵。
编辑现有的upstart配置文件(如上所述)不是一个好主意。 一个更新的包可以提供一个更新的配置,你不得不一遍又一遍地重复你的更改。
通过看看 man 5 init
人们会找到一个更合适的解决方案:使用复盖配置。 简单的例子:假设我们有一个名为"foobar"的服务,所以会有一个名为 /etc/init/foobar.conf
随着它的暴发户配置。 现在您不想删除该文件,也不想修改它-但您都不希望此服务运行? 所以放置一个 复盖 旁边的文件: /etc/init/foobar.override
,包含(可选的标题与描述和),而不是 start on
/ stop on
行你用一个单词放置一行: manual
. 这样你就告诉暴发户基本上使用 foobar.conf
,但重写启动定义以仅在手动强制时启动该服务(通过 service foobar start
在我们的例子中)。
对我来说最简单的方法,因为我只使用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
一如既往;你可以参考 手册页.
请注意,这里仍然缺少Ubuntu14.04的答案。
@MarcelloNuccio:从Ubuntu15.04开始,Upstart已被弃用,转而支持Systemd。
[这个](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