systemd模板声明
这里常见与某些变量传递, 比如:
sudo systemctl start [email protected]
# 可以看到其实内部系统配置文件为 [email protected]
这种就是 Systemd 的模板服务, 用于调用可变的系统服务.
[Unit]
# 内部采用 %I 获取到外部 [email protected] 传入 yyy 模板值
Description=Temple Service By %I
After=network.target nss-lookup.target
这里 systemd 内置不少可能需要的变量, 这些模板服务依赖大量系统环境, 所以编写的时候需要在 Description 打印好做好排查:
%n: 完整的 Unit 文件名字,包括 .service 后缀名%N: 完整的 Unit 文件名字,不包括 .service 后缀名%p: Unit 模板文件名中 @ 符号之前的部分,不包括 @ 符号%P: Unit 模板文件名中 @ 符号之前的部分,包括 @ 符号%i: Unit 模板文件名中 @ 符号之后的部分,不包括 @ 符号和 .service 后缀名%I: Unit 模板文件名中 @ 符号之后的部分,包括 .service 后缀名%c: systemd 的 slice 地址, 也就是CGroup该值%u: 运行服务的用户,如果 Unit 文件中没有指定,则默认为 root, 也就是echo $USER%U: 运行服务的用户 ID, 也就是echo $UID环境变量的值%g: 运行服务的用户组,如果 Unit 文件中没有指定,则默认为 root 分组%G: 运行服务的用户 ID, 也就是echo $GROUPS环境变量的值%H: 实际运行节点的主机名, 也就是echo $HOSTNAME环境变量的值%h: 运行服务的用户 Home 目录,即echo $HOME环境变量的值%s: 运行服务的用户默认 Shell 类型,即echo $SHELL环境变量的值%v: 内核版本,即uname -r命令输出的内容%b: Boot ID,这是一个随机数,每个节点各不相同,并且每次节点重启时都会改变(字符串)%t: 用户运行的状态目录,CGROUP记录的启动用户 slice 目录, 一般位于/run/user/xxxx%m: 实际运行节点的 Machine ID,和%b类似, 用于辨识设备%%:%字符量, 防止被转移成内部的变量
基本上用的最多就是上面这几个模板变量.