Systemd
相关的知识点
系统启动和服务器守护进程管理器,负责在系统启动或运行时,激活系统资源,服务器进程和其他进程。
核心概念
unit:表示不同类型的systemd,通过配置文件进行标识和配置,文件中主要包含了系统服务、监听soket、保存的系统快照以及其它与init相关的信息。
配置文件
/usr/lib/systemd/system
:每个服务最主要的启动脚本设置。/run/systemd/system
:系统执行过程中产生的服务脚本,比上面目录优先运行。/etc/systemd/system
:管理员建立的执行脚本。
unit类型,#systemctl -t help
- Service unit:文件扩展名喂.service,用于定义系统服务。
- Target unit:文件扩展名喂.target ,用于模拟实现运行级别。
- Device unit:device,用于定义内核识别的设备。
- Mount unit:mount,定义文件系统挂载点。
- Socket unit:socket,用于标识进程间通信用的socket文件,也可在系统启动时延迟启动服务,实现按需启动
- Snapshot unit:snapshot,管理系统快照
- Swap unit:swap,用于标识swap设备
- Automount unit:automount,文件系统的自动挂载点
- Path unit:path,用于自定义文件系统中的一个文件或目录使用,常用于当文件系统变化时,延迟激活服务,如:spool目录
service unit 文件格式
在unit文件中,以“#”开头的行后面的内容会被认为是注释,相关布尔值,1、yes、on、true都是开启,0、no、off、false都是关闭,时间单位默认是秒,所以要用毫秒(ms)分钟(m)等必须显式说明。
service unit file文件通常由三部分组成
- [Unit]:定义与Unit类型无关的通用选项,用于提供Unit描述信息、unit行为及依赖关系等。
- [Service]:与特定类型相关的专用选项,此处为Service类型。
- [Install]:定义由
“systemctl enable”
以及“systemctl disable”
命令在实现服务启用或禁用时用到的一些选项
unit段的常用选项
- PIDFile:值是指定一个文件,这个文件保存的是当前服务启动后的PID。
- Description:描述信息。
- After:定义unit的启动次序,表示当前unit应该晚于哪些unit启动,其功能与Before相反。
- Requires:依赖到的其他units,强依赖,被依赖的units无法激活时,当前unit也无法激活。
- Wants:依赖到其他的units,弱依赖。
- Conflicts:定义units间的冲突关系。
Service段的常用选项
EnvironmentFile
:环境配置文件。配置文件路径以-
开头表示Systemd
应该忽略如果文件不存在而产生的错误。比如,EnvironmentFile=-/etc/kubernetes/kube-controller-manager.conf 意味着即使文件不存在,Systemd也不会报错,并且会继续启动服务。ExecStart
:指明启动unit要运行命令或脚本的绝对路径。ExecStartPre
:ExecStart前运行。ExecStartPost
:ExecStart后运行。ExecStop
:指明停止unit要运行的脚本或命令。- Restart:当设定Restart=on-failure时,则当次daemon服务以外终止后,会再次自动启动此服务。
RestartSec
:当服务异常后进程重启的间隔时间,RestartSec=5表示进程故障5秒后开始重启。- Type:定义影响ExecStart及相关参数的功能的unit进程启动类型。
- simple:默认值,这个daemon主要由ExecStart接的指令串来启动,启动后常驻于内存中。
- forking:由ExecStart启动的程序做父进程延申出其他子程序来作为此daemon的主要服务。原生父程序在启动结束后就会终止。
- oneshot:与simple类似,不过这个程序在工作完毕后就结束了,不会常驻在内存中。
- dbus:与simple类似,但这个daemon必须要在取得一个D-Bus的名称后,才会继续运作,因此通常也要同时设定BusNname=才行,和socket编程有关系。
- notify:在启动完成后会发送一个通知消息。
- idle:与simple类似,要执行这个daemon必须要所有工作都顺利执行完毕后才会执行。这类的daemon通常是开机到最后才执行即可的服务。
Install段的常用选项
- Alias:别名,可使用
systemctl command Alias.service
命令执行。 RequiredBy
:被哪些units所依赖,强依赖。WantedBy
:被哪些units所依赖,弱依赖,一般情况下就是指定这个服务在哪个target目标环境下运行,比如multi-user,target- Also:安装本服务的时候还要安装别的相关服务
注意
对于新创建的unit文件,或者修改了的unit文件,要通知systemd
重载此配置文件,然后才能生效
systemctl daemon-reload
命令
查看当前系统的所有systemd
服务(units单元)
systemctl list-units --type service --all
查看进程占用的主机资源
top -p pid
测试样例
脚本ttt.sh
#!/bin/bash
echo && > /var/run/ttt.pid #echo &&表示获取当前进程的PID
while:
do
echo "my shell," $(date) >> /root/ttt.txt
sleep 1
done
服务ttt.service
[Unit]
Description=my shell #这里填写个人描述
[Service]
#EnvironmentFile=-/etc/kubernetes/kube-controller-manager.conf
type=simple
PIDFile=/var/run/ttt.pid
ExecStart=/bin/sh /opt/tt.sh
ExecStop=/bin/kill -s TERM $MAINPID
[Install]
WantedBy=multi-user.target
该笔记来源于b站课程链接如下:
零基础Linux入门50.Linux的启动过程与系统管理(三)systemd