如何启用或禁用服务?
我读到了如何在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
(如果启用/运行disabled / NOT运行,将告诉您服务的STATUS)。 -
sudo service apache2 restart
(将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 status SERVICE
的状态。 判断服务当前是否正在运行。
systemctl enable SERVICE
– 在下次重启或下次启动事件时打开服务。 它在重启后仍然存在。
systemctl disable 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
的链接,并恢复启用和/或手动启动服务的function。
UPSTART(自2005年4月15日起弃用)
如果我们想使用正式的Upstart方式(请注意,目前并非所有服务都已转换为Upstart),我们可以使用以下命令:
status SERVICE
– 这将告诉我们转换后的服务是否正在运行。 请注意,不推荐使用此选项以支持start
, stop
, status
和restart
。 它还会告诉我们服务是否尚未转换为新贵:
转换后的服务通常会输出当前状态(Starting,Running,Stopping …)和进程ID。 未转换的服务会给出有关未知作业的错误。
某些快捷方式可能只能使用上面的service
命令,但不能使用下面的命令,除非它们100%转换为upstart服务:
-
START –
sudo start mysql
-
停止 –
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
中的S##xxxx
表示服务xxxx
的“起始顺序”。 相反, K##xxxx
中的K##xxxx
表示服务xxxx
命令。
SysV的一个主要问题是,在启动系统时, 一切都必须以串行方式完成,一个接一个,使系统启动时间非常慢 。 有人尝试将其并行化,但它们是偶然的,很难充分利用。 这是Upstart创建的主要原因。
暴发户
Upstart使用/etc/init
作业定义文件来定义应该启动服务的事件。 因此,在系统启动时,upstart会处理各种事件,然后可以并行启动多个服务。 这允许他们充分利用系统的资源,例如,通过在另一个CPU绑定服务运行时启动磁盘绑定服务,或者在网络等待分配动态IP地址时。
您可以通过运行ls /etc/init/*.conf
来查看所有upstart作业文件
让我停下来说,如果你不知道服务是什么,或者做什么,请不要禁用它!
并非所有服务都已转换为暴发户。 在过去的几个月里,在Canonical的服务器团队工作期间,我已经研究了许多转换后的作业文件,最好的部分是它允许人们摆脱所有脚本“魔法”而只是放入这里和那里很少有命令来确定如何启动服务,仅此而已。 但就目前而言,只有少数传统的网络服务,如鱿鱼和桑巴 ,已被转换。
服务是新贵吗?
为了确定服务是否是基于upstart的,您可以运行status命令:
status servicename
如果这是一个新贵的工作,它将显示:
$ status statd statd start/running, process 942
但如果不是,你会看到更像这样的东西:
$ status apache2 status: Unknown job: apache2
在这种情况下, apache2
尚未转换为upstart 。 因此,要禁用apache2
您只需运行即可
sudo update-rc.d apache2 disable sudo service apache2 stop
在upstart中禁用服务(作业)
Upstart作业定义没有update-rc.d
命令。 要禁用作业,您需要直接编辑作业文件以禁用它。 有两种方法可以做到这一点。
如果你仍然想要手动启动它,那么你需要start on
条件下注释掉start on
。 假设您要安装samba ,但不要自动启动它。 这是作业文件(在natty中):
description "SMB/CIFS File Server" author "Steve Langasek " 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
使用start / stop节禁用服务(截至11.04)
从11.04版的upstart版本开始,有一个新的关键字可以禁用stanzas的start on
和stop on
: manual
。 因此,从11.04开始禁用该服务的另一种方法是:
echo 'manual' | sudo tee /etc/init/mysql.override # command from root shell echo 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
来启用和禁用服务。
乔布斯管理
另一个替代方案是通过安装来完成Jobs-Admin
sudo apt-get install jobs-admin
哪个也提供这样的GUI
要显示更多作业,您必须从其菜单中勾选显示受保护的作业 。
chkconfig的
第三个选项是chkconfig ,
sudo apt-get install chkconfig
它可以通过CLI chkconfig
,显示On / Off作业列表。 我们还可以使用chkconfig –list
查看系统服务
可以使用服务打开
chkconfig on
可以使用关闭服务
chkconfig off
我们甚至可以使用具有正确标题的正确init脚本添加我们自己的服务。
chkconfig --add
更新的rc.d
另外一个选项可以在这里引用update-rc.d , 这里简要解释一下。
请注意,对于Ubuntu Server 12.04,使用update-rc.d
而不是chkconfig。
对于我们这些通过ssh运行Ubuntu的人来说,我认为最好的选择是rcconf
– 一个基于文本的程序:
sudo apt-get install rcconf sudo rcconf
使用制表符和箭头键导航,按空格键启用/禁用。 重启后,更改会持续存在。
从这篇博文中借来的截图,其中还显示了sysv-rc-conf
– 一个类似的工具,它也可以让你设置运行级别。 (对于那些碰巧关心跑步水平而希望改变它们的人:)
不幸的是,rcconf不能与upstart( /etc/init/*
列出的服务)一起使用,只是使用传统机制( ls -l /etc/init.d/*
– 不是符号链接的机制)。
幸运的是,许多与服务器相关的服务(Apache,Tomcat,mdadm,boinc-client ……)尚未转移到新手。
我发现有这个GUI工具,类似于BUM但与Upstart兼容:
-
乔布斯管理
sudo apt-get install jobs-admin
编辑现有的upstart配置文件(如上所述)并不是一个好主意。 更新的软件包可以提供更新的配置,您不得不一遍又一遍地重复更改。
通过查看man 5 init
可以找到更合适的解决方案:使用覆盖配置。 简短的例子:假设我们有一个名为“foobar”的服务,所以会有一个名为/etc/init/foobar.conf
的文件及其upstart配置。 现在你不想删除该文件,也不想修改它 – 但是你不希望这个服务运行吗? 因此,在它旁边放置一个覆盖文件: /etc/init/foobar.override
,包含(可选地带有描述的标题),而不是在行stop on
start on
/ stop on
用一个单词放置一行: manual
。 这样你就告诉upstart基本上使用foobar.conf
,但是覆盖启动定义只能在手动强制执行时启动该服务(在我们的示例中通过service foobar start
)。
还有Boot-Up Manager 。
要安装: sudo apt-get install bum
更多信息: http : //www.marzocca.net/linux/bum.html