Linux Systemd管理的12种服务单元

原创
2019/11/29 13:35
阅读数 418

在Linux中,systemd是排名第1的守护进程,它管理着很多服务单元(service unit),运行下面这个命令就能查询得到:

# systemd --type help

显示的结果是12种业务单元:

service,服务单元

一个或多个守护进程共同协作,向系统用户提供的一种功能,其名称后通常是.service,如firewalld.service提供的是防火墙服务,其功能包括规则的添加、修改、查询、删除,及使用netfilter来进行数据包过滤等等。这一类业务通常访问量较大,业务频繁。

而守护进程则是在后台运行的程序,一般跟着系统的关停而关停,且多以d为其名称最后一个字母,如firewalld。

systemctl --type=service

# find /lib/systemd/system/ -name "*.service" | xargs grep Type

会发现,service按照其运行的特性又被分成至少6大类:

1、oneshot

2、dbus

3、forking

4、idle

5、simple

6、notify

socket - 套接字单元

它负责一个进程与另一个进程的通信,即IPC - inter-process communication。进程A创建了一个套接字,等着别的进程来通信;进程B去连接那个套接字时,systemd会启动一个守护进程,将套接字提供给进程B。启动时,会有意将套接字的启动过程加以延时。通常套接字的访问不会太频繁。

target - 目标状态单元

以.target为后缀的配置文件,负责将一组相关的服务单元组合在一起,以提供某个特定的运行环境。如multi-user.target是一个字符界面的窗口,graphical.target则是一个图形界面的窗口。

device

mount - 挂载单元

挂载服务,其配置文件都以xxxx.mount命名,都是由systemd管理的、系统中挂载的文件系统。比如那个鼎鼎有名的/tmp的挂载,其配置文件存放在/lib/systemd/system/tmp.mount

[root@localhost system]# cat tmp.mount
#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.

[Unit]
Description=Temporary Directory
Documentation=man:hier(7)
Documentation=http://www.freedesktop.org/wiki/Software/systemd/APIFileSystems
ConditionPathIsSymbolicLink=!/tmp
DefaultDependencies=no
Conflicts=umount.target
Before=local-fs.target umount.target

[Mount]
What=tmpfs
Where=/tmp
Type=tmpfs
Options=mode=1777,strictatime

# Make 'systemctl enable tmp.mount' work:
[Install]
WantedBy=local-fs.target


我看到一个配置文件名叫/lib/systemd/system/var-lib-nfs-rpc_pipefs.mount,那么肯定有一个挂载到一个名叫/var/lib/nfs/rpc_pipefs的目录。

# mount | grep rpc_pipefs

 

automount

snapshot

timer - 计时单元

设定某项服务的动作时间点,其配置文件以.timer为后缀。而被它设定的服务通常与它同名。如:

# cat chrony-dnssrv@.timer
[Unit]
Description=Periodic DNS SRV lookup of %I for chrony

[Timer]
OnActiveSec=0     #活跃时马上就去找chrony玩耍
OnUnitInactiveSec=1h     #自个儿呆1小时后再去找chrony玩耍

[Install]
WantedBy=timers.target
----------------------------------------------------------

# cat chrony-dnssrv@.service
[Unit]
Description=DNS SRV lookup of %I for chrony
After=chronyd.service network-online.target
Wants=network-online.target

[Service]
Type=oneshot
ExecStart=/usr/libexec/chrony-helper update-dnssrv-servers %I

 

swap

path - 路径单元

路径服务(path service)负责监看某一个路径(目录),只有那个路径或目录发生变化时,才启动某项相关的服务,如打印共享的spool路径。

slice - 切片服务单元

slice,切片,是用来将多个相关进程集中管理起来的一种服务单元。在切片服务单元(slice units)里,可以针对其管理的进程组添加诸如CPU、内存等系统资源的限制。systemd管理的切片,形象地讲,都是cgroup下的树状节点。切片的名称都以.slice结尾。Linux中有4种初始的slice,如:

  • -.slice,这是切片上最高的节点,又称为“根切片”(root slice)
  • system.slice,通常管理的是服务单元(service unit),以及范围单元(scope unit)
  • machine.slice,虚拟机和容器都属于本切片
  • user.slice,用户的登录session则属于本切片,包括所有跟用户有关的进程

上图:一个服务的切片示意图

scope - 范围单元

范围单元,专门管理由外部访问激发的进程,不能自己派生子进程,且只能由程序调用scope服务。

本单元运行的方式是将一组进程集中起来管理,以达到统筹使用系统资源的目的。

 

展开阅读全文
打赏
0
3 收藏
分享
加载中
更多评论
打赏
0 评论
3 收藏
0
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部