systemd 是否允许Environment
在服务文件中这样做?
Environment=abc=${abc:-'notABC?'}
意思是我会设置abc
为好像abc
存在abc
,如果没有设置abc
为notABC?
systemd 可以做到这一点吗?
答案1
不,这在 systemd 单元文件中是不可能的,它只支持最小的变量扩展,并不是真正旨在实现类似 shell 的变量替换。
如果您需要类似您所描述的内容,建议将初始化包装到 shell 脚本中并在您的 中使用该脚本ExecStart=
,在这种情况下,您将拥有 shell 的所有功能,可在执行服务之前设置环境变量。主程序。
如果您在 中使用 shell 脚本ExecStart=
,请确保exec
在脚本末尾使用 来启动主程序,这样 shell 就不会妨碍 systemd 直接监视您的命令。
如果您想避免创建和维护额外的外部文件,您可以在单元文件中内联 shell 脚本,但在这种情况下请记住,您需要显式调用 shell(使用sh -c
另一个 shell 或等效的其他 shell)并且您需要转义$
(通过使用其中两个)以防止 systemd 尝试解释它。所以你需要类似的东西:
ExecStart=/bin/sh -c 'abc=$${abc:-"notABC?"}; exec mycmd "$abc"'