实例参数的 systemd 字符串格式

实例参数的 systemd 字符串格式

我正在尝试设置一个systemd接受参数的服务,并在几个地方使用它。我认为我已经非常接近了:使用我的配置文件名[email protected],我可以运行systemctl start myservice@foo myservice@bar,并%i在配置中使用来获取foo服务bar实例。

诀窍在于我需要参数在一个部分中为大写,但在另一个部分中为小写。

# foo instance
User=myuser-%i   # myuser-foo
ExecStart=my_command /data/%i  # needs to be /data/FOO



# bar instance
User=myuser-%i   # myuser-bar
ExecStart=my_command /data/%i  # needs to be /data/BAR

到目前为止,我能想到的唯一方法是编写包装器脚本,然后更改为ExecStart=my_wrapper.sh %i让包装器进行必要的字符串格式化。但这似乎很笨拙,这可以直接在服务配置中实现吗?

答案1

您可以使用 bash 的大写参数语法:${v^^}将变量中的字符转换$v为大写。因此,您可能想执行类似 的操作v="%i"; cmd /data/${v^^}。您需要阻止 systemd 解释${},因此请$$使用$

ExecStart=bash -c 'v="%i"; exec my_command /data/"$${v^^}"'

相关内容