Systemd bash 内置函数

Systemd bash 内置函数

我有一个应用程序需要使用突击队源来设置他的环境文件。

[Unit]
Description=Programname
After=syslog.target network.target

[Service]
User=root
ExecStartPre=source /opt/environmentname/bin/activate enviromentname
ExecStart=/var/programname/programname -f /etc/programname/programconfig.conf

[Install]
WantedBy=multi-user.target  

现在,Systemd 抱怨源,因为这不是绝对路径,并且源是 bash 的内置文件,所以我尝试了

ExecStartPre=/bin/bash -c "source /opt/environmentname/bin/activate enviromentname"

我们使用 source 而不是 chmod +x 运行脚本是因为供应商的要求。

那么有没有办法让它发挥作用呢?或者我们需要使用分叉什么的吗?

我们如何在 Systemd 单元文件中正确使用 bash 内置命令?

答案1

您应该能够执行多行脚本,例如

ExecStart=/bin/bash -c '\
   source /opt/environmentname/bin/activate environmentname; \
   exec /var/programname/programname -f /etc/programname/programconfig.conf'

答案2

要理解这一点...是否ExecStart取决于该命令设置的环境?因为这些行实际上不是在同一个 shell 中执行的,所以你不能指望它们共享环境。您需要的是Environment在单元文件中使用关键字。这样,ExecStart将获得您的文件定义的环境。

https://coreos.com/os/docs/latest/using-environment-variables-in-systemd-units.html

相关内容