我阅读了有关如何在 Ubuntu 中启用和禁用服务的文章,似乎有不同的可能性来管理它们。
我发现的第一个方法是update-rc.d
将新服务添加到启动中,其针对的是/etc/init.d
文件夹及其内容。
我发现的另一个是编辑文件夹.conf
中的文件/etc/init
。
启用/禁用/添加服务的推荐方法是什么以及为什么?
您能否给出一个简短且一步一步的示例,说明如何在 Ubuntu 中添加服务以及启用和禁用它?
答案1
有些服务可以使用 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
:在这种情况下,由于您没有提及要为服务执行的操作,因此它将显示该特定服务可用的所有选项。此方面因服务而异,例如,对于 MySQL,它只会提及缺少一个参数。对于其他服务(如网络服务),它将提及所有可用选项的小列表。
系统化
从 Ubuntu 15.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
:在下次重启或发生停止事件时关闭服务。重启后仍会继续。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
。它还将告诉我们服务是否尚未转换为 upstart:
转换后的服务通常会输出当前状态(正在启动、正在运行、正在停止...)和进程 ID。未转换的服务会给出有关未知的工作。
某些快捷方式可能仅适用于service
上述命令,而不适用于以下命令,除非它们 100% 转换为 upstart 服务:
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
。
答案2
目前,在 Ubuntu 中,有三种不同的方式将软件作为服务启动,系统安全,暴发户和systemd此处的服务定义为系统在后台运行的程序,而不是由用户直接启动和运行的程序。
系统安全
在 Linux 中启动服务的传统方式是将脚本放在中/etc/init.d
,然后使用update-rc.d
命令(或在基于 RedHat 的发行版中,chkconfig
)来启用或禁用它。
此命令使用一些略微复杂的逻辑在 中创建符号链接/etc/rc#.d
,以控制启动服务的顺序。如果您运行,ls /etc/rc2.d
您可以看到服务将以文件名(如 )被终止的顺序,K##xxxx
并以文件名 启动S##xxxx
。##
inS##xxxx
表示服务的“启动顺序” xxxx
。相反,##
inK##xxxx
表示服务的终止顺序xxxx
。
一个主要问题系统安全是在启动系统时,所有操作都必须按顺序进行,一个接一个,导致系统启动时间非常慢。曾有人尝试过将其并行化,但这些尝试都是杂乱无章的,很难充分利用。这是暴发户已创建。
暴发户
Upstart 使用作业定义文件来/etc/init
定义应在哪些事件上启动服务。因此,在系统启动时,upstart 会处理各种事件,然后可以并行启动多个服务。这使它们能够充分利用系统的资源,例如,在另一个 CPU 密集型服务运行时启动磁盘密集型服务,或者在网络等待分配动态 IP 地址时启动磁盘密集型服务。
你可以通过运行以下命令查看所有 upstart 作业文件ls /etc/init/*.conf
让我在这里停下来并说一下,如果您不知道什么是服务,或者它的作用,请不要禁用它!
并非所有服务都已转换为 upstart。过去几个月在 Canonical 的服务器团队工作时,我处理过许多转换后的作业文件,最棒的是,它允许人们摆脱所有脚本“魔法”,只需在这里和那里输入一些命令来准确定义如何启动服务,仅此而已。但目前,只有少数传统网络服务,如乌贼和桑巴,已转换。
服务是否为新贵?
为了确定某个服务是否基于 upstart,您可以运行 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
条件。假设你想安装桑巴,但不能让它自动启动。这是作业文件(在 natty 中):
description "SMB/CIFS File Server"
author "Steve Langasek <[email protected]>"
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
禁用桑巴,您只需#
在“ ”前面加上一个即可start on local-filesystems
。请注意,虽然它不会在启动时重新启动,但您仍然需要使用以下命令停止它:
sudo service smbd stop
然而,如果你不想桑巴首先,我建议删除该包。但是,如果你想要安装它,但不想启动它,你也可以这样做:
mv /etc/init/smbd.conf /etc/init/smbd.conf.disabled
使用启动/停止节禁用服务(截至 11.04)
从 11.04 版的 upstart 开始,有一个新的关键字可以禁用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
在文件中输入关键字即可。
答案3
系统配置信息
尝试使用系统配置信息
sudo apt-get install sysv-rc-conf
要开始管理服务,请执行
sudo sysv-rc-conf
这将打开如下交互窗口
Ctrl+n
您可以使用下一页和Ctrl+p
上一页进一步浏览页面。您可以通过选择SPACE
所需的运行级别来启用和禁用服务。
职位管理
另一种选择是 职位管理通过安装
sudo apt-get install jobs-admin
它还提供了像这样的 GUI
要显示更多职位,您必须勾选显示受保护的职位从其菜单中。
查配置
第三个选择是查配置,
sudo apt-get install chkconfig
它可以通过 CLI 来使用chkconfig
,显示开启/关闭作业的列表。我们还可以使用以下命令查看系统服务chkconfig –list
可以使用以下方式开启服务
chkconfig <service> on
可以使用以下方式关闭服务
chkconfig <service> off
我们甚至可以使用具有适当标题的适当初始化脚本来添加我们自己的服务。
chkconfig --add <service>
更新-rc.d
另一个选择可以参考这里是 update-rc.d,简要解释一下这里。
请注意,对于 Ubuntu Server 12.04,update-rc.d
用来代替 chkconfig。
答案4
我发现达到仿生有这个 GUI 工具,类似于 BUM 但与 Upstart 兼容:Jobs-Admin
sudo apt-get install jobs-admin