$UPSTART_JOB 的 systemd 等价物是什么?

$UPSTART_JOB 的 systemd 等价物是什么?

根据 DRY 原则,我宁愿使用一个符号链接或硬链接到不同名称的 systemd 配置,而不是制作一堆略有不同的 systemd 配置,例如myservice1.service, myservice2.service, ...

使用 SysV initscripts,我可以用来$0确定启动脚本的名称,使用 Upstart.conf文件有$UPSTART_JOB自动变量,但我一直在 systemd 文档中搜索类似的内容,但没有成功。有任何想法吗?

答案1

Systemd 有模板,它让单个单元文件接受参数并启动不同的实例。经典的例子是 getty:

~ systemctl cat [email protected] | grep Exec
ExecStart=-/sbin/agetty --noclear %I $TERM

如果这样做systemctl start getty@tty7,则在 systemd 启动服务之前%I将 替换为。tty7

在您的文件中使用它会更容易myservice.service。请记住为其命名[email protected],并在命令行中相应地使用%I或。%iExecStart

有关的:

答案2

%p(转义) 或%P(未转义) 相当于$UPSTART_JOB.从了解 Systemd 单元和单元文件


以下是一些更常见的说明符,当用相关信息解释实例单元时将被替换:

  • %n:在模板文件中出现的任何位置,都会插入完整的结果单位名称。
  • %N:这与上面相同,但是任何转义(例如文件路径模式中存在的转义)都将被反转。
  • %p:这引用了单位名称前缀。这是单位名称中位于@符号之前的部分。
  • %P:这与上面相同,但任何转义都相反。
  • %i@:引用实例名称,它是实例单元中跟随的标识符。这是最常用的说明符之一,因为它将保证是动态的。该标识符的使用鼓励使用配置重要标识符。例如,服务将运行的端口可以用作实例标识符,并且模板可以使用此说明符来设置端口规范。
  • %I:此说明符与上面的相同,但任何转义都相反。
  • %f:这将替换为未转义的实例名称或前缀名称,前缀为/.
  • %c:这将指示设备的控制组,并/sys/fs/cgroup/systemd/删除标准父层次结构。
  • %u:配置为运行该单元的用户的名称。
  • %U:与上面相同,但作为数字 UID 而不是名称。
  • %H:运行该单元的系统的主机名。
  • %%:这用于插入文字百分号。

通过在模板文件中使用上述标识符,systemd 在解释模板以创建实例单元时将填写正确的值。


信用去往穆鲁获取改善我的搜索结果的“模板”参考。

相关内容