Systemd 的环境:检查变量是否存在

Systemd 的环境:检查变量是否存在

systemd 是否允许Environment在服务文件中这样做?

Environment=abc=${abc:-'notABC?'}

意思是我会设置abc为好像abc存在abc,如果没有设置abcnotABC?

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"'

相关内容