本文是 i 春秋作家「xiehudie」表哥分享的技术文章,旨在为大家提供更多的学习方法与技能技巧,文章仅供学习参考。本套Linux进阶教程共分为14章,欢迎大家前来系统学习。
前期回顾>>
![Linux进阶教程丨第2章:从命令行管理文件](https://p1-tt.byteimg.com/origin/pgc-image/cd1318395163497db4a70b69d6ebd8f9.png?from=pc)
第7章:控制服务和守护进程
一、自动启动的系统进程
Systemd介绍:
Systemd守护进程管理Linux的启动,一般包括服务启动和服务管理。它可以在系统引导时以运行中的系统上激活系统资源、服务器守护和其他进程。
守护进程是在执行各种任务的后台等待或运行的进程。一般来说呢,许多守护的名称都是以字母d来结尾,一般情况下,守护进程在系统引导时自动启动并持续运行到关机或被手动停止为止。
Systemd意义上的服务通常指的是一个或多个守护进程,但启动或停止一项进程可能会对系统的状态进行一次更改,不会留下守护进程之后继续运行。
在Linux中,第一个启动的进程叫做systemd,以下是systemd提供的几项功能:
1. 并行化功能(同时可以启动多个服务),它可以提高系统的启动速度。
2. 按需启动守护进程,而不需要单独的服务。
3. 自动服务依赖关系管理,可以防止长时间超时。
4. 利用Linux控制组一起追踪相关进程的方式。
二、服务单元
Systemd使用单元来管理不同类型的对象,systemctl命令用于管理单元。下面是几种常用的单元类型:
1. 服务单元具有.service拓展名,代表系统服务,这种单元用于启动经常访问的守护进程。(如Web服务)
2. 套接字单元具有.socket拓展名,代表systemd应监控的进程间通信套接字,systemd将启动一个守护进程并将连接传递给它,套接字单元用于延迟启动时的服务启动,或者按需启动不常使用的服务。
3. 路径单元具有.path拓展名,用于将服务的激活推迟到特定文件系统更改发生之后,这通常用于使用假脱机目录的服务。(如打印服务)我们可以通过systemctl命令来知道系统的当前状态。(如下图所示)
在以上输出中,通过--type=service选项将列出的单元类型限制为服务单元。输出包含以下几列:
Systemctl list-units命令输出中的列
UNIT:服务单元名称
LOAD:systemd是否正确解析了单元的配置并将单元加载到内存中
ACTIVE:单元的高级别激活状态,表示单元是否已成功启动。
SUB:单元的低级别激活状态,此信息指示有关单元的更多详细信息。信息视单元类型、状态以及单元的执行方式而异。
DESCRIPITON:单元的简短描述
默认情况下,systemctl list-units --type=service命令只会列出激活状态为active的服务单元,而 --all选项课列出所有服务单位,不论激活状态如何(如以下所示)。
服务状态:
使用systemctl status name.type来查看特定单元的状态。如果未提供单元类型,则systemctl将显示服务单元的状态。(以下是服务单元信息中各个字段的含义)
状态输出中服务状态几个关键字的含义:
三、控制系统服务
在Linux中,需要我们手动停止或启动服务的原因有很多:比如可能需要更新服务:可能需要更改配置文件:可能需要卸载服务:或者,我们可能会手动启动不经常使用的服务。
要启动服务,首先需要systemctl status验证它是否未在运行。然后,以root用户身份使用systemctl status命令。如果命令中的服务名称缺少服务类型,systemd服务会查找用于服务管理的.service文件。(如下图所示)
如果要停止正在运行的服务,则我们可以使用stop参数来运行systemctl命令。(如下图所示)
在重新启动正在运行的服务期间,服务将停止运行然后重新启动,在重新启动服务时,进程ID会改变,并且在启动期间会关联新的进程ID。要重新启动正在运行的服务,我们可以使用restart参数来运行systemctl命令。(如下图所示)
某些服务可以重新加载其配置文件而不需要重新启动,这个过程被称为服务重新加载。重新加载服务不会更改与各种服务进程关联的进程ID。要重新加载正在运行的服务,我们可以使用reload参数来运行systemctl命令。(如下图所示)
如果我们不确定服务是否具有重新加载配置文件更改的功能,我们可以使用reload-or-restart参数来运行systemctl命令。如果重新加载功能可用,该命令将重新加载配置更改,反之,该命令将重新启动服务以实施新的配置更改。
某些服务要求首先运行其他服务,从而创建对其他服务的依赖项。其他服务并不在系统引导时启动,而是仅仅在需要时启动。在这两种情况下,systemd和systemctl根据需要启动服务,不论是解决依赖项,还是启动不经常使用的服务。例如,如果CUPS打印服务未在运行,并有文件被放入打印假脱机目录,则系统将启动CUPS相关的守护进程或命令来满足打印服务。
Systemctl命令摘要:
服务管理使用命令