服务是常驻在内存中的程序,并且可以提供一些网络或服务功能,英文称为service。
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实际启动的服务脚本文件。
systemd 服务单元(unit)分类
上面说到根据不同的功能,服务单元被分为不同的类型,可以根据服务脚本文件的扩展名来区分为以下几种。
其中.service 的系统服务类型最为常见。
使用systemctl 管理服务
systemd 启动服务的机制,主要通过 systemctl 指令来处理。
1 | [root@study ~]# systemctl [command] [unit] |
查看当前服务状态
使用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 无论如何都无法被启动!因为已经被强制注销 (非删除)。
查看系统中的存在的服务
使用 list-units 命令查看当然启动的服务, list-unit-files查看已安装的服务,命令如下
1 | [szp@study ~]# systemctl [command] [--type=TYPE] [--all] |
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类别的服务。
查看服务之间的依赖性
1 | systemctl list-dependencies [unit] [--reverse] |
命令执行结果如下图所示。
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 里面。
下面对每个项中的设置细则进行介绍。
参考文献:《鸟哥的Linux私房菜:基础学习篇 第四版》