文章目录
前言:
服务是常驻在内存中的程序,并且可以提供一些网络或服务功能,英文称为service。
1. systemd配置目录
从 CentOS 7.x 以后,Red Hat系列放弃了一直使用的init
启动脚本的方式管理服务,改用systemd 这个启动服务管理机制。该机制的好处有:
- 平行处理服务,加速开机流程,systemd可以让所有的服务同时启动。
- 服务依赖性自我检查。
- 对服务依据功能进行分类,将多个服务集合成一个群组。
systemd 将过去执行脚本通通称为一个服务单位 (unit)。每种服务单位依据功能来区分时,就分类为不同的类型 (type)。
基本的类型有包括(一般通过不同的后缀名作为区分):
- 系统服务
- 数据监听与交换的插槽档服务 (socket)
- 储存系统状态的快照类型
- 提供不同类似执行等级分类的操作环境 (target)
systemd配置目录有以下三种:
- /usr/lib/systemd/system/:每个服务最主要的启动脚本设置
- /run/systemd/system/:系统执行过程中所产生的服务脚本,这些脚本的优先级要比
- /usr/lib/systemd/system/ 高
- /etc/systemd/system/:管理员依据主机系统的需求所创建的执行脚本,执行优先级又比 /run/systemd/system/ 高
- /etc/systemd/system/
目录下存放的是需要开机执行的服务,该目录下有大量的链接文件,链接到/usr/lib/systemd/system/目录下,该目录下的文件才是systemd实际启动的服务脚本文件。
2. systemd 服务单元(unit)分类
上面说到根据不同的功能,服务单元被分为不同的类型,可以根据服务脚本文件的扩展名来区分为以下几种。
其中.service 的系统服务类型最为常见。
3. 使用systemctl 管理服务
systemd 启动服务的机制,主要通过 systemctl
指令来处理。
[root@study ~]# systemctl [command] [unit]
command 主要有:
start :立刻启动后面接的 unit
stop :立刻关闭后面接的 unit
restart :立刻关闭后启动后面接的 unit,亦即执行 stop 再 start 的意思
reload :不关闭后面接的 unit 的情况下,重新载入配置文件,让设置生效
enable :设置下次开机时,后面接的 unit 会被启动
disable :设置下次开机时,后面接的 unit 不会被启动
status :目前后面接的这个 unit 的状态,会列出有没有正在执行、开机默认执行否、登录等信息等!
is-active :目前有没有正在运行中
is-enable :开机时有没有默认要启用这个 unit
3.1 查看当前服务状态
使用systemctl status
命令可以查看当然服务的状态。其中的状态含义如下:
- Loaded:该行表示此服务是否会开机启动,enabled表示开机启动,disabled表示不启动,vendor preset表示第一次安装时的预设值。
- Active:现在这个服务单元的状态是正在执行 (running) 或没有执行 (dead)
Active除了 running 跟 dead 之外,还有其他几个基本的状态:
- active (running):正有一只或多只程序正在系统中执行的意思
- active (exited):仅执行一次就正常结束的服务,目前并没有任何程序在系统中执行。
- active (waiting):正在执行当中,不过还再等待其他的事件才能继续处理。
- inactive:这个服务目前没有运行。
Loaded的状态还有:
- enabled:这个 服务将在开机时被执行
- disabled:这个 daemon 在开机时不会被执行
- static:这个 daemon 不可以自己启动 (enable 不可),不过可能会被其他的 enabled
- 的服务来唤醒
- mask:这个 daemon 无论如何都无法被启动!因为已经被强制注销 (非删除)。
3.2 查看系统中的存在的服务
使用 list-units
命令查看当前启动的服务, list-unit-files
查看已安装的服务,命令如下
[szp@study ~]# systemctl [command] [--type=TYPE] [--all]
command:
list-units :依据 unit 列出目前有启动的 unit。若加上 --all 才会列出没启动的。
list-unit-files :依据 /usr/lib/systemd/system/ 内的文件,将所有文件列表说明。
--type=TYPE:就是之前提到的 unit type,主要有 service, socket, target 等
systemctl命令不加参数等同于 systemctl list-units,打印结果中各列的含义如下:
- UNIT :项目的名称,包括各个 unit 的类别
- LOAD :开机时是否会被载入,默认 systemctl 显示的是有载入的项目而已
- ACTIVE :目前的状态,须与后续的 SUB 搭配!就是用 systemctl status 观察时,active 的项目
- DESCRIPTION :详细描述
使用systemctl list-unit-files
列出已经安装的服务。
使用以下命令systemctl list-units –type=service –all筛选service类别的服务。
3.3 查看服务之间的依赖性
systemctl list-dependencies [unit] [--reverse]
--reverse :反向追踪谁使用这个服务单元
命令执行结果如下图所示。
4. systemctl 针对 service 类型的配置文件
systemd 的配置文件大部分放置在/usr/lib/systemd/system/ 目录内,该目录存放软件默认的配置,不建议修改。修改的配置文件应该放置在 /etc/systemd/system/ 目录下。
以vsftpd.service为例,如果要对其进行修改,可以在以下目录中进行操作。
- /usr/lib/systemd/system/vsftpd.service:官方的默认配置文件;
- /etc/systemd/system/vsftpd.service.d/custom.conf:在 /etc/systemd/system 下面创建与配置文件相同文件名的目录,但是要加上 .d 的扩展名。然后在该目录下创建配置文件即可。配置文件后缀最好为 .conf 。该目录下的文件会附件进入入/usr/lib/systemd/system/vsftpd.service
- /etc/systemd/system/vsftpd.service.wants/*:此目录内的文件为链接文件,设置依赖服务的链接。意思是启动了 vsftpd.service 之后,最好再启动这目录下面建议的服务。
- /etc/systemd/system/vsftpd.service.requires/*:此目录内的文件为链接文件,设置依赖服务的链接。意思是在启动 vsftpd.service 之前,需要事先启动哪些服务的意思。
配置文件编写格式
了解了配置文件放置的目录,下面来看配置文件本身的格式定义。
以sshd.service为例,查看其文件内容如下,文件由一个个中括号表示的项组成。设置项通常是可以重复的,后面的设置会取代前面的。空白行、开头为 # 或 ; 的那一行,都代表注解。如果设置参数需要有“是/否”的项目 (布林值, boolean),你可以使用 1, yes, true, on 代表启动,用 0, no, false, off 代表关闭。
- [Unit]: unit 本身的说明,以及与其他相依 daemon 的设置,包括在什么服务之后才启动此 unit 之类的设置值;
- [Service], [Socket], [Timer], [Mount], [Path]…:不同的 unit type 就得要使用相对应的设置项。当前是 sshd.service 为例,所以使用 [Service] 来设置。 主要在规范服务启动的脚本、环境配置文件文件名、重新启动的方式等等。
- [Install]:这个项表示将此 unit 安装到哪个 target 里面。
下面对每个项中的设置细则进行介绍。