在 Linux 中启动服务的传统方式是在 中放置一个脚本/etc/init.d,然后使用update-rc.d命令(或在基于 RedHat 的发行版中chkconfig)来启用或禁用它。
该命令使用一些稍微复杂的逻辑来创建符号链接/etc/rc#.d,控制启动服务的顺序。如果您运行ls /etc/rc2.d,您可以看到服务将以文件名 like 终止K##xxxx并以文件名开头的顺序S##xxxx。##inS##xxxx表示 service 的“开始顺序” xxxx。相反,##inK##xxxx表示 service 的终止命令xxxx。
有些服务可以使用 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
并恢复启用和/或手动启动服务的能力。新贵(自 15.04 起已弃用)
如果我们想使用官方的 Upstart 方式(请注意,目前并非所有服务都已转换为 Upstart),我们可以使用以下命令:
status SERVICE
- 这将告诉我们转换后的服务是否正在运行。请注意,不赞成使用start
,stop
,status
&restart
。它还会告诉我们服务是否尚未转换为 upstart:转换后的服务通常会输出当前状态(启动、运行、停止...)和进程 ID。未转换的服务会给出关于未知作业的错误。
某些快捷方式可能仅适用于上述
service
命令,但不适用于以下命令,除非它们 100% 转换为新贵服务:sudo start mysql
: 开始sudo stop mysql
: 停止sudo restart mysql
: 重新开始sudo status smbd
: 地位启用/禁用服务
要永久切换服务的启动或停止,您需要:
该节
manual
将阻止 Upstart 在下次启动时自动加载服务。任何带有.override
结尾的服务都将优先于原始服务文件。之后您将只能手动启动该服务。如果您不想要这个,那么只需删除.override
. 例如:将使 MySQL 服务进入
manual
模式。如果你不想要这个,之后你可以简单地做并重新启动以使服务再次自动启动。当然,要启用服务,最常见的方法是安装它。如果您安装 Apache、Nginx、MySQL 或其他,它们会在安装完成后自动启动,并且会在每次计算机启动时启动。如上所述,禁用将使用该服务
manual
。目前,在 Ubuntu、 SysV、Upstart和systemd中,软件实际上有三种不同的方式作为服务启动。服务在这里定义为系统在后台运行的程序,而不是由用户直接启动和运行的程序。
系统V
在 Linux 中启动服务的传统方式是在 中放置一个脚本
/etc/init.d
,然后使用update-rc.d
命令(或在基于 RedHat 的发行版中chkconfig
)来启用或禁用它。该命令使用一些稍微复杂的逻辑来创建符号链接
/etc/rc#.d
,控制启动服务的顺序。如果您运行ls /etc/rc2.d
,您可以看到服务将以文件名 like 终止K##xxxx
并以文件名开头的顺序S##xxxx
。##
inS##xxxx
表示 service 的“开始顺序”xxxx
。相反,##
inK##xxxx
表示 service 的终止命令xxxx
。SysV的一个主要问题是,在引导系统时,一切都必须串行完成,一件接一件,使得系统引导时间非常慢。曾尝试将其并行化,但它们是随意的,难以充分利用。这是创建Upstart的主要原因。
暴发户
Upstart 使用作业定义文件
/etc/init
来定义应该启动服务的事件。因此,在系统启动时,upstart 会处理各种事件,然后可以并行启动多个服务。这使他们能够充分利用系统资源,例如,通过在另一个受 CPU 限制的服务运行时启动一个受磁盘限制的服务,或者在网络等待分配动态 IP 地址时启动。您可以通过运行查看所有新贵作业文件
ls /etc/init/*.conf
让我在这里停下来说,如果您不知道服务是什么或它做什么,请不要禁用它!
并非所有服务都已转变为新贵。过去几个月在 Canonical 的服务器团队工作时,我处理了许多转换后的作业文件,最好的部分是它允许人们摆脱所有脚本的“魔法”,只需放入一个这里和那里的几个命令来准确定义如何启动服务,仅此而已。但目前,只有少数传统网络服务,如squid和samba已经转换。
是服务新贵吗?
为了确定服务是否基于新贵,您可以运行 status 命令:
如果这是一个新贵的工作,它会显示:
但如果不是,你会看到更像这样的东西:
在这种情况下,
apache2
尚未转换为暴发户。所以,要禁用apache2
你只需运行在新贵中禁用服务(作业)
Upstart 作业定义没有
update-rc.d
命令。要禁用作业,您需要直接编辑作业文件以禁用它。有两种方法可以做到这一点。如果您希望仍然能够手动启动它,那么您需要注释掉
start on
条件。假设您想安装samba,但不让它自动启动。这是作业文件(在 natty 中):要禁用samba,您只需
#
在 "start on local-filesystems
" 前添加一个。请注意,虽然它不会在启动时重新启动,但这次您仍然需要停止它但是,如果您不想启动samba,我建议您实际删除该软件包。但是,如果您希望它安装但无法启动,您也可以执行以下操作:
使用 start/stop 节禁用服务(从 11.04 开始)
从 11.04 中的 upstart 版本开始,有一个新的关键字可以禁用
start on
和stop on
节:manual
. 因此,从 11.04 开始禁用该服务的另一种方法是:您可以创建一个
override
文件来禁用服务,而无需编辑作业定义,只需将manual
关键字放入其中即可。sysv-rc-conf
尝试使用sysv-rc-conf
并开始管理服务,执行
这将弹出这样的交互式窗口
Ctrl+n
您可以使用for next page 和Ctrl+p
for previous page进一步浏览页面。SPACE
您可以通过选择所需的运行级别来启用和禁用服务。工作-管理员
另一个替代方案是 Jobs-Admin通过安装
它还提供了这样的 GUI
要显示更多工作,您必须从其菜单中勾选显示受保护的工作。
chkconfig
第三个选项是chkconfig,
它可以通过 CLI 使用
chkconfig
,显示开/关作业列表。我们也可以使用查看系统服务chkconfig –list
可以使用打开服务
可以使用关闭服务
我们甚至可以添加我们自己的服务,使用适当的初始化脚本和适当的标题。
更新-rc.d
另一个选项可以参考这里 update-rc.d ,这里简要解释一下。
请注意,对于 Ubuntu Server 12.04,
update-rc.d
使用 chkconfig 代替。对于我们这些通过 ssh 运行 Ubuntu 的人来说,我认为最好的选择是
rcconf
- 基于文本的程序:使用选项卡和箭头键导航,按空格键启用/禁用。更改在重新启动后保持不变。
从这篇博文借用的截图,其中还显示
sysv-rc-conf
了一个类似的工具,它也可以让你设置运行级别。(对于那些碰巧关心运行级别并希望更改它们的人:)不幸的是,rcconf 不适用于 upstart(在 中列出的服务
/etc/init/*
),只能使用传统机制(ls -l /etc/init.d/*
- 不是符号链接的那些)。幸运的是,许多与 ssh 连接到服务器时相关的服务(Apache、Tomcat、mdadm、boinc-client...)还没有被转移到新贵。
我发现直到仿生都有这个GUI工具,类似于BUM但与Upstart兼容:Jobs-Admin
编辑现有的 upstart 配置文件(如上所述)不是一个好主意。更新的包可以提供更新的配置,您必须一遍又一遍地重复您的更改。
通过查看
man 5 init
将找到更合适的解决方案:使用覆盖配置。简短的例子:假设我们有一个名为“foobar”的服务,所以会有一个文件调用/etc/init/foobar.conf
它的新贵配置。现在您不想删除该文件,也不想修改它——但您也不希望该服务运行?所以在它旁边放置一个覆盖/etc/init/foobar.override
文件: ,包含(可选的带有描述的标题和)而不是start on
/stop on
行,您放置一个带有一个单词的行:manual
。通过这种方式,您告诉 upstart 基本上使用foobar.conf
,但覆盖启动定义以仅在手动强制执行时启动该服务(service foobar start
在我们的示例中)。还有启动管理器。
安装:
sudo apt-get install bum
更多信息: http: //www.marzocca.net/linux/bum.html
因为我只使用 CLI,对我来说最简单的方法是
update-rc.d
.要启用或禁用重启时自动启动等:
例子:
要停止或启动守护程序或检查其状态:
例子:
update-rc.d
可以比上面显示的基本功能多一点:一如既往; 你范参考手册页。
我使用Stacer:
它还显示服务和流程。一个完整的 GUI 系统工具箱。