systemd配置文件夹路径
systemd配置文件存在于以下三个文件中:
/etc/system/system
: 存放系统启动的默认级别及启动的unit的软连接,优先级最高
/run/systemd/system
: 系统执行过程中产生的服务脚本,优先级次之。
/usr/lib/systemd/system
: 存放系统上所有的启动文件。优先级最低
unit分类及配置
unit的定义文件可以根据其后缀名称识别其定义的类型,可以使用systemctl -t help 查看
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
#l .servicre定义了系统服务的启动
#l .target 定义了系统启动的级别标签,systemd 没有运行级别的概念,创建标签只是为了兼容老版本。
#l .socket 定义了进程通信用到的套接字,套接字与进程是分离的
#l .device 定义了系统启动时内核识别的文件,systemd提供了设备的管理功能,/dev 下的设备由/etc/udev/下的配置文件与.device共同定制
#l .mount 定义了系统的文件系统的挂载点
#l .snapshop 系统快照
#l .swap 用于标识swap设备
#l .automount 文件系统的自动挂载点
#l .path用于定义文件系统中的一个文件或目录使用。常用于文件系统发生变化时,延迟激活服务。
|
文件通常由3段组成
1
2
3
4
5
|
[Unit]
[unit的类型:service target socket]
[install]
|
[unit] : 不属于第二个标签的定义都放在这里,或存放不属于unit类型的定义,描述信息,依赖的unit
1
2
3
4
5
6
7
8
9
10
11
|
# Description:描述信息,此文本显示在systemctl status命令的输出中
# After:表明需要依赖的服务,作用决定启动顺序(定义单元启动的顺序。只有在after中指定的单元激活后,该单元才会启动。与require不同,After不会显式激活指定单位。Before选项具有与After相反的功能。)
# Before:表明被依赖的服务(其他服务需要这个服务启动)
# Requires:依赖到的其他unit ,强依赖,即依赖的unit启动失败。该unit不启动。
# Wants:依赖到的其他unit,弱依赖,即依赖的unit 启动失败。该unit继续启动
# Conflicts:定义冲突关系,配置负依赖关系,与require相反。
|
[unit 类型]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
[Service]:
# Type:启动时关系的定义,
simple:exec启动的进程就是主进程。
=> 官方解析:默认值。由ExecStart启动的进程是该服务的主进程
forking :exec 启动的进程生成的其中一个子进程成为主进程,启动完成后,旧的主进程会退出。
=> 官方解析:由ExecStart启动的进程生成一个子进程,该子进程成为服务的主进程。父进程在启动完成后退出。
ontshot:启动下一个进程前主进程退出。
=> 官方解析:这种类型类似于simple,但是进程会在启动后续单元之前退出
dbus:
=> 官方解析:这种类型类似于simple,但是后续单元只有在主进程获得D-Bus名称后才会启动
notify:
=> 官方解析:这种类型类似于simple,但是后续单元只有在通过sd_notify()函数发送通知消息后才会启动
ldle:
=> 官方解析:与simple类似,服务二进制文件的实际执行被延迟到所有作业完成,这避免了状态输出与服务的shell输出混合。
# PIDFile=/var/run/sshd.pid
# EnvironmentFile 需要使用到的变量的定义文件
# ExecStart= 启动 unit需要执行的命令
# ExecStartpre:启动前操作
# ExecStartpost:启动后操作
# ExecStop=停止unit需要执行的命令
# Restart:
# ExecReload=/bin/kill -HUP $MAINPID
# KillMode=process
# Restart=on-failure
# RestartSec=42s
|
[install] : 服务启动或禁用时的一些选项
1
2
3
4
5
6
7
|
Alias:
RequlredBy: 被那些unit所依赖,
WanteBy:被那些unit所依赖
注:修改了的unit文件 需要重载。systemctl daemon-reload
|
centos 7程序管理工具
centos 7 的程序管理基本上都是由工具systemctl完成,systemctl的控制命令是固定不变的。非systemctl启动的服务systemctl无法进行管理。systemd 兼容init文件夹下的启动脚本。
systemctl命令的服务管理的使用:
管理服务通过的service的unit文件实现的。管理unit是通过配置文件实现的(针对服务的unit文件,只有service的配置文件才提供功能)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
# systemctl 参数 name.service
服务管理参数说明:
start: 启动服务
stop: 停止服务
restart: 重启服务
status: 查看状态
条件重启参数说明:
try-restart:即服务之前是启动的则进行重启,如果服务没有启动则不进行操作
reload-or-restart:首先进行重载,如果重载不成功则进行重启
reload-or-try-restart:重载或条件式重启,上两个的结合
设置服务是否可以被用户设置开机启动状态参数说明:
unmask:取消禁止。
mask:禁止。设置服务是否可以被用户设置开机启动状态
查看服务的当前激活状态参数说明:
is-active: 服务已经启动命令的状态返回值为0 命令未启动命令的状态返回值为非0值
|
查看所有已经激活的服务:
1
2
3
4
5
6
7
8
9
10
11
|
-t 指定显示的unit类型。
--all 显示更加详细的信息列表。
-a 等价 --all
# systemctl list-units
# systemctl list-units -t service
# systemctl list-units -t service -a
|
查看所有服务:
1
|
systemctl list-units -a
|
查看所有服务状态:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
# systemctl list-unit-files
-a 、--all : 查看所有服务的状态
-t 、--type :指定需要查看的unit类型
loaded :配置文件已经加载,载入内存
active(running):一次或多次持续处理的运行
active(exited):成功完成一次性的配置
active(waiting):运行中,等待一个事件
inactive:不运行
enabled:开机启动
disabled:开机不启动
static:开机不启动,但可被另一个启用的服务激活
|
用来列出该服务在哪些运行级别下启用和禁用:
1
2
3
|
ls /etc/systemd/system/*.wants/sshd.service
systemctl list-unit-files --type target --all
|
设置服务开机不启动:
1
|
# systemctl disable 服务名称unit
|
查看服务是否开机自启:
1
|
# systemctl is-enabled name.service
|
查看服务的依赖关系:
1
2
3
|
# systemctl list-dependencies name.service
# systemctl list-depebdencies
|
重载服务:
1
|
# systemctl daemon-reload
|
杀掉进程:
systemctl命令的系统运行级别的使用
老版本的sysv以及upstart已经被替换为systemd,但centos7中同样可以能使用init命令切换级别,而且centos7中并无运行级别的概念,centos老版本中的运行级别也不过就是一个被定义死的对象。
centos7 为了兼容老版本定义了与老版本 runlevel{0…6}相对应的target后缀的unit。与启动级别对应的target类型的unit为真正的unit的软连接。
系统需要运行的unit由软连接文件存放在/etc/systemd/system文件夹下。代表运行状态的target可以相互包含,如5模式的target,包含3模式的target与一些其他unit,或者说5模式依赖3模式,启动5模式需要先启动3模式。
systemd的思想是层层包含的关系,5依赖3 ,如果3模式下的服务没有启动,在5模式下同样不会启动。
SysV 运行级别与 systemd 目标的比较:
运行级别 |
目标单位 |
描述 |
0 |
runlevel0.target poweroff.target |
关闭并关闭系统电源。 |
1 |
runlevel1.target rescue.target |
设置救援外壳。单用户 |
2 |
runlevel2.target multi-user.target |
设置一个非图形化多用户系统。 |
3 |
runlevel3.target multi-user.target |
设置一个非图形化多用户系统。 |
4 |
runlevel4.target multi-user.target |
设置一个非图形化多用户系统。 |
5 |
runlevel5.target graphical.target |
建立一个图形多用户系统。 |
6 |
runlevel6.target reboot.target |
关闭并重新启动系统 |
1
2
3
|
[root@CentOS7.0~]#ll `locate runlevel0.target`
lrwxrwxrwx. 1 root root 15 3月 22 21:57 /usr/lib/systemd/system/runlevel0.target -> poweroff.target
|
使用systemctl命令切换级别:
1
2
3
|
systemctl isolate name.target
注:只有/lib/systemd/system/*.target文件中AllowIsolate=yes 才能切换
|
使用systemctl 命令查看级别:
1
2
3
|
# systemctl list-units –t target
--all 查看所有的 target
|
使用systemctl 对默认的运行级别进行设定
1
2
3
|
# systemctl get-default => 获取当前的运行级别
# systemctl set-default name.target => 设置当前的运行级别
|
切换至紧急救援模式
1
2
3
|
# systemctl rescue => 加载驱动
# systemctl emergency => 不会加载驱动
|
其他命令:
1
2
3
4
5
6
7
8
9
|
关机: systemctl halt, systemctl poweroff
重启: systemctl reboot
挂起: systemctl suspend
快照\休眠: systemctl hibernate
休眠并挂起:systemctl hybrid-sleep
|