systemd 常用命令和配置
# systemd 配套命令
hostnamectl #查看设置主机名
localectl #查看设置本地化语⾔
timedatectl #查看设置时间时区
loginctl #查看登录⽤户
journalctl #⽇志管理
# 配置目录
/etc/systemd/system/ #当前系统本地配置本地⽣效的配置
/lib/systemd/system/ #软件包自带的各种配置
systemctl enable xxxx.service 相当于 ln -s /lib/systemd/system/xxxx.service /etc/systemd/system/multi-user.target.wants/xxxx.service
Unit 分类
- Service unit:系统服务
-
Target unit: 多个 Unit 构成的⼀个组
-
Device Unit:硬件设备
-
Mount Unit:⽂件系统的挂载点
-
Automount Unit:⾃动挂载点
-
Path Unit:⽂件或路径
-
Scope Unit:不是由 Systemd 启动的外部进程
-
Slice Unit:进程组
-
Snapshot Unit:Systemd 快照,可以切回某个快照
-
Socket Unit:进程间通信的 socket
-
Swap Unit:swap ⽂件
-
Timer Unit:定时器
After 和 Before 只涉及启动顺序,不涉及依赖关系。
Wants: 表示与 database.service 之间存在"弱依赖"关系,即如果 database.service 启动失败或停⽌运⾏,不影响当前服务继续执⾏。
Requires: 表示"强依赖"关系,即如果该服务启动失败或异常退出,那么当前服务也必须退出。
Service 分类
- simple(默认值):ExecStart 字段启动的进程为主进程
-
forking: ExecStart 字段将以 fork() ⽅式启动,此时⽗进程将会退出,⼦进程将成为主进程
-
oneshot:类似于 simple ,但只执⾏⼀次,Systemd 会等它执⾏完,才启动其他服务
-
dbus:类似于 simple ,但会等待 D-Bus 信号后启动
-
notify:类似于 simple ,启动结束后会发出通知信号,然后 systemd 再启动其他服务
-
idle:类似于 simple ,但是要等到其他任务都执⾏完,才会启动该服务。⼀种使⽤场合是为了让该服务的输出,不与其他服务的输出相混合
Exec 相关:
-
ExecStart:启动当前服务的命令
-
ExecStartPre:启动当前服务之前执⾏的命令
-
ExecStartPost:启动当前服务之后执⾏的命令
-
ExecReload:重启当前服务时执⾏的命令
-
ExecStop:停⽌当前服务时执⾏的命令
-
ExecStopPost:停⽌当其服务之后执⾏的命令
KillMode 相关:
-
control-group(默认值):当前控制组⾥⾯的所有⼦进程,都会被杀掉
-
process:只杀主进程
-
mixed:主进程将收到 SIGTERM 信号,⼦进程收到 SIGKILL 信号
-
none:没有进程会被杀掉,只是执⾏服务的 stop 命令。
Restart 相关:
-
no(默认值):退出后不会重启
-
on-success:只有正常退出时(退出状态码为0),才会重启
-
on-failure:⾮正常退出时(退出状态码⾮0),包括被信号终⽌和超时,才会重启
-
on-abnormal:只有被信号终⽌和超时,才会重启
-
on-abort:只有在收到没有捕捉到的信号终⽌时,才会重启
-
on-watchdog:超时退出,才会重启
-
always:不管是什么退出原因,总是重启
# 配置模版,[Mount] 为可选类
[Unit]
Description=.....
After=network.target
Requires=database.service disk-data.mount
[Service]
Type=simple
ExecStart=the-program $ENV_OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
EnvironmentFile=/etc/sysconfig/xxxx
Environment=ENV_KEY=env_value
KillMode=process
Restart=on-failure
RestartSec=10s
[Mount]
What=/dev/by-res
Where=/mnt/the-path
[Install]
WantedBy=multi-user.target