我有一个应用程序需要使用突击队源来设置他的环境文件。
[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