目录

systemd的配置及管理

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

杀掉进程:

1
# systemctl kill 进程名

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