简介:在不同的Linux版本中,管理服务的方式不尽相同,主要分界限在RHEL/CentOS6版本,也就是说,在CentOS6以及之前版本中,写服务脚本,需要放在/etc/init.d/目录下,这些脚本都是bash脚本,且脚本编写较复杂。而在CentOS7/RHEL7以及以后版本中,采用了一种叫unit的配置文件来管理服务,写服务脚本只需要按照标准格式编写即可。通过systemd命令集可以方便的对这些Unit进行管理。
systemd是Linux上系统守护进程管理工具,字幕d(daemon)是守护进程的缩写,所以,systemd的意思就是守护整个系统。systemd可以管理Linux系统中的所有资源,不同的资源统称为Unit,常见的unit有:
Service unit:文件扩展名为.Service,用于定义系统服务
Target unit、文件名扩展为.target,用于模拟实现“运行级别”
Mount unit:文件名扩展为.mount 定义文件系统挂载点。
Systemd是内核启动后的第一个用户进程,PID为1,是所有其它用户进程的父进程。
可以通过top命令查看:

1、认识service的unit文件
扩展名:.service
service文件存放路径:
/etc/systemd/system/* ―――― 系统管理员手动软件安装包或脚本放置于此,优先级更高
/run/systemd/system/* ―――― 运行时配置文件,这个目录一般是进程在运行时动态创建unit文件的目录,一般很少修改,除非是修改程序运行时的一些参数时,即Session级别的,才在这里做修改。
/usr/lib/systemd/system/* ―――― 该目录中包含的是软件包安装的单元,也就是说通过yum、dnf、rpm等软件包管理命令管理的systemd单元文件,都放置在该目录下。
/lib/systemd/system: 指向/usr/lib/systemd/system。
Systemd 默认从目录/etc/systemd/system/读取配置文件。但是,里面存放的大部分文件都是符号链接,指向目录/usr/lib/systemd/system/,真正的配置文件存放在这个目录。
2、systemd 使用语法
systemctl [command] [unit](配置的应用名称)
command可选项·
start:启动指定的unit systemctl start nginx
stop:关闭指定的unit systemctl stop nginx
restart:重启指定unit systemctl restart nginx
reload:重载指定unit systemctl reload nginx
enable:系统开机时自动启动指定unit,前提是配置文件中有相关配置 systemctl enable nginx
disable:开机时不自动运行指定unit systemctl disable nginx
status:查看指定unit当前运行状态 systemctl status nginx
3、service unit文件的例子
下面/usr/lib/systemd/system/postfix.service文件,它描述的是postfix服务的管理方式:

3、service unit文件的例子
整个文件分三个部分,[Unit]·[Service]·[Install]
[Unit]:记录unit文件的通用信息。
[Service]:记录Service的信息
[Install]:安装信息。
(1)、 [Unit]部分
Description:对本service的描述
Before, After:定义启动顺序,Before=xxx.service,代表本服务在xxx.service启动之前启动。After=xxx.service,代表本服务在xxx之后启动。
(2)、 [Service]部分
Type:service的种类,包含下列几种类型:
simple 默认,这是最简单的服务类型。意思就是说启动的程序就是主体程序,这个程序要是退出,那么一切都退出。
forking 标准的启动方式。服务包含父进程和子进程,启动程序后,会调用 fork() 函数,通过父进程生成子进程。
oneshot:这种服务类型就是启动完成,进程就没了。属于一次性启动。
notify:跟simple 类似,但是notify会在当前服务启动完毕,发送一个信号通知Systemd。
(2)、 [Service]部分
ExecStartPre:ExecStart执行前所调用的命令。
ExecStart:服务启动时执行的命令,此命令就是服务的主体。
ExecStartPost:ExecStart执行后所调用的命令。
ExecStop:定义停止当前服务时执行的命令。
ExecReload:定义当服务收到重新加载信号时执行的命令。
EnvironmentFile:环境配置文件
PIDFile:指向当前服务 PID file 的绝对路径
注意:启动、重启、停止命令全部要求使用绝对路径
(3)、 [Install]部分
WantedBy:何种情况下,服务被启用。
例如:WantedBy=multi-user.target(多用户环境下启用)
发表回复