MeteorCat / systemd模板声明

Created Fri, 29 Sep 2023 18:01:24 +0800 Modified Wed, 29 Oct 2025 23:25:05 +0800
594 Words

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 类似, 用于辨识设备
  • %%: % 字符量, 防止被转移成内部的变量

基本上用的最多就是上面这几个模板变量.