systemd守护进程
1.systemd概述:
systemd(system daemon)是系统管理守护进程的缩写;
systemd是一种新的linux系统服务管理器,用于替换init系统,可以兼容init开机启动脚本,能够管理系统启动过程和系统服务,一旦启动起来,就将监管整个系统。在centos7系统中,PID1被systemd所占用;
systemd可以并行地启动系统服务进程,并且最初仅启动确实被依赖的服务,极大减少了系统的引导时间,这也就是为什么centos7系统启动速度比centos6快许多的原因;
systemd的主命令是systemctl
¹,用于管理系统及服务;
说明
¹:chkconfig是管理系统服务(service)的命令行工具。所谓系统服务就是随系统启动而启动,随系统关闭而关闭的程序。Centos7使用systemd进程取代了SysV进程(即init脚本启动),所以systemd的主命令systemctl取代了对应的chkconfig命令,即systemctl命令将service和chkconfig命令相结合。
2.systemd特性:
系统引导时实现进程并行启动;
按需启动进程;
根据依赖关系进行服务控制;
系统状态快照;
3.systemd关键特性:
基于socket¹的激活机制:socket与程序分离;
基于bus的激活机制; 是一个低延迟、低开销、高可用性的进程间通信机制;
基于device的激活机制:能监控内核输出的硬件信息,当设备插入时一旦发现就创建设备文件,再自动挂载至某挂载点,如果挂载点不存在还能自动创建;
基于path的激活机制:系统可监控某目录或文件是否存在,如果文件在了立即就能激活一个服务或进程;例如某服务运行中突然崩溃,崩溃时能创建一个log或lock文件;一旦发现这个lock文件立即激活一个程序,如发送报告;
系统快照:能保存各unit的当前状态信息于持久存储设备中;因为systemd的所有管理都是通过unit实现的,回滚时使用;
向后兼容sysv init脚本:放在/etc/init.d/服务脚本也靠systemd来启动;
systemctl的命令是固定不变的;不能自定义命令,旧版能自定义如start、stop等命令,在脚本中可随意定义命令使用;而systemctl的命令是固定不变的;
非由systemd启动的服务,systemctl无法与之通信,无法控制此服务;例如启动web进程httpd,直接在命令行键入httpd也能启动,这种服务在CentOS5和6上使用servcie httpd stop有时也能停掉服务,但是systemd就不行,但可自定义unit脚本来实现;
说明¹:socket:套接字,它是计算机之间进行通信的一种约定或一种方式,是进行网络连接的一种工具。通过socket这种约定
,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送数据。UNIX/Linux程序在执行任何形式的I/O操作时,都是
在读取或者写入一个文件描述符(fd)。一个文件描述符只是一个和打开的文件相关联的整数,它的背后可能是一个硬盘上的普
通文件、FIFO、管道、终端、键盘、显示器,甚至是一个网络连接,其中网络连接也是一个文件,它也有文件描述符。我们可以
通过socket()函数来创建一个网络连接,或者说打开一个网络文件,socket()的返回值就是文件描述符。有了文件描述符,我
们就可以使用普通的文件操作函数来传输数据了,例如:
• read()函数:读取从远程计算机传来的数据;
• write()函数:向远程计算机写入数据;
• listen()函数:让套接字进入被动监听状态;
• accept()函数:接收客户端请求;
• bind()函数:将套接字与特定的IP地址和端口绑定;
• connect()函数:与客户端建立连接;
……
4.systemd核心概念:unit单元
unit由其相关配置文件进行标识、识别和配置;文件中主要包含了系统服务、监听的socket、保存的快照以及其他与init相关的信息;这些配置文件主要保存在:
配置文件目录:
• /usr/lib/systemd/system
• /run/systemd/system
• /etc/systemd/system
5.unit单元类型:
unit单元
|
文件扩展名
|
解释说明
|
Service unit
|
.service
|
定义系统服务
|
Target unit
|
.Target
|
用于模拟实现"运行级别", 其实是一群unit的集合
|
Device unit
|
.device
|
定义内核识别的设备
|
Mount unit
|
.mount
|
定义文件系统挂载点
|
Socket unit
|
.socket
|
标识进程间通信用到的socket文件
|
Snapshot unit
|
.snapshot
|
管理系统快照
|
Swap unit
|
.swap
|
标识swap设备
|
Automount unit
|
.automount
|
文件系统自动挂载点设备
|
Path unit
|
.path
|
定义文件系统中的一个文件或目录
|
(1)service unit:
动作
|
CentOS 6
|
CentOS 7
|
启动
|
service NAME start
|
systemctl start NAME.service
|
停止
|
service NAME stop
|
systemctl stop NAME.service
|
重启
|
service NAME restart
|
systemctl restart NAME.service
|
状态
|
service NAME status
|
systemctl status NAME.service
|
条件式重启
|
service NAME condrestart
|
systemctl try-restart NAME.service
|
重载或重启
|
--
|
systemctl reload-or-restart NAME.service
|
重载或条件式重启
|
--
|
systemctl reload-or-try-restart NAME.service
|
查看某服务当前激活与否的状态
|
--
|
systemctl is-active NAME.service
|
查看所有已激活的服务
|
--
|
systemctl list-units --t service
|
查看所有服务(包含未激活)
|
chkconfig --list systemctl list-units -t NAME.service -a
|
|
设置服务开机自启
|
chkconfig NAME on
|
systemctl enable NAME.service
|
禁止服务开机自启
|
chkconfig NAME off
|
systemctl disable NAME.service
|
查看某服务是否能开机自启
|
chkconfig --list NAME
|
systemctl is-enabled NAME.service
|
禁止某服务设定为开机自启
|
--
|
systemctl mask NAME.service
|
取消此禁止
|
--
|
systemctl umask NAME.service
|
查看服务依赖关系
|
--
|
systemctl list-dependencies NAME.service
|
service命令语法:systemctl 参数 name[.service]
常用参数:
• start:启动服务
• stop:停止服务
• restart:重启或启动服务
• try-restart:若服务启动则重启,若服务未启动则不操作
• reload-or-restart:重载或重启服务
• reload-or-try-restart:重载或条件式重启服务
• mask:将服务链接至/dev/null,则服务无法进行开机自启的设定
• unmask:取消将服务链接至/dev/null
• enable:设置服务开机自启动
• disable:关闭服务开机自启动
• status:查询状态和最近状态日志
• is-active:查询服务当前是否启用
• is-enabled:查询服务是否开机自启
• list-dependencies:查询服务的依赖关系
• list-units --type service:查看所有已经启动的服务的信息
• list-units --type service --all:查看所有服务的信息
• list-unit-files --type service:查询所有服务的开机自启状态
(2)target units:
运行级别
|
对应别名
|
服务名
|
|
sysvinit
|
systemd target
|
解释说明
|
0
|
runlevel0.target
|
poweroff.target
|
0
|
poweroff.target
|
关闭系统
|
1
|
runlevel1.target
|
rescue.target
|
1,s,single
|
rescue.target
|
单用户模式
|
2
|
runlevel2.target
|
multi-user.target
|
2,4
|
multi-user.target
|
用户定义/域特定运行级别。默认等同于3
|
3
|
runlevel3.target
|
multi-user.target
|
3
|
multi-user.target
|
多用户,非图形界面
|
4
|
runlevel4.target
|
multi-user.target
|
5
|
graphical.target
|
多用户,图形化界面
|
5
|
runlevel5.target
|
graphical.target
|
6
|
reboot.target
|
重启
|
6
|
runlevel6.target
|
reboot.target
|
emergency
|
emergency.target
|
紧急shell
|
target命令语法:systemctl 参数 name[.target]
常用参数:
• list-units --type:查看当前已装载的target
• isolate:切换当前的target文件
• rescue:切换到紧急救援模式
• emergency:切换到emergency模式,不加载驱动
• get-default:查看默认运行级别
• set-default:设置默认运行级别,设置/etc/systemd/system/default.target
6.unit文件组成:
systemd的unit文件通常由三部分组成:[Unit],[Service]和[Install]。
(1)[Unit]:定义与unit类型无关的通用选项;用于提供unit的描述信息、unit行为及依赖关系等;
• Description:描述信息;
• After:定义unit的启动次序;表示当前unit应该晚于哪些unit启动;其功能与Before相反;
• Requires:依赖的units,此为强依赖,当被依赖的units无法激活时,当前unit即无法激活;
• Wants:依赖的units,弱依赖;
• Conflicts:定义冲突关系;
(2)[Service]:与特定类型相关的专用选项,与unit类型相同,此处为service类型;
• Type:用于定义影响ExecStart及相关参数的功能的unit进程启动类型:
-simple:默认值,执行ExecStart指定的命令,启动主进程;
-forking:以fork方式从父进程创建子进程,创建后父进程会立即退出;
-oneshot:一次性进程,systemd会等当前服务退出,再继续往下执行;
-dbus:当前服务通过D-Bus启动;
-notify:当前服务启动完毕,会通知systemd再继续往下执行;
-idle:若有其他任务执行完毕,当前服务才会运行;
• EnvironmentFile:环境配置文件;
• ExecStart:指定启动unit要运行的命令或脚本;
其中ExecStartPre表示启动unit前运行的脚本或命令;ExecStartPost表示启动unit后要运行的命令或脚本;
• ExecStop:指明停止unit要运行的命令或脚本;
• Restart:指定;
(3)[Install]:定义由"systemctl enable|disable"命令在实现服务启动或禁用时用到的一些选项;
• Alias:别名;
• RequiredBy:该服务被哪些units所依赖;强依赖;
• WantedBy:该服务被哪些units所依赖;弱依赖;
7.systemd电源管理:
命令
|
操作
|
systemctl reboot
|
重启机器
|
systemctl {halt| poweroff}
|
关机
|
systemctl suspend
|
挂起
|
systemctl hibernate
|
休眠
|
systemctl hybrid-sleep
|
混合休眠模式(快照并挂起)
|
作者:yemao_UJS
运维
进程
systemd