在systemd服务文件中设置sh脚本的环境变量。

问题描述 投票:0回答:1

我试着用现成的bash脚本来设置env?

这是我尝试使用的服务。

[Unit]
Description=myserver service
After=multi-user.target

[Service]
Type=simple
User=ec2-user
Group=ec2-user
WorkingDirectory=/home/ec2-user/myserver/
ExecStart=/bin/sh -c '/home/ec2-user/myserver/config/myserverVars.sh ;/home/ec2-user/venv/bin/python  /home/ec2-user/myserver/myserver.py 2>&1 >> /home/ec2-user/myserver/logs/systemd_myserver.log' 
StandardOutput=append:/home/ec2-user/myserver/logs/systemd_stdout.log
StandardError=append:/home/ec2-user/myserver/logs/systemd_stderr.log

[Install]
WantedBy=multi-user.target

myserverVars.sh:

#!/bin/bash
export [email protected]
export APP2_BIND_PASS=xxxxxx
export APP3=xxxxxx

在homeec2-usermyserverconfigmyserverVars.sh中的变量从来没有被设置,并且服务器在没有变量的情况下启动,这是错误的 , 我试图避免使用环境键或环境文件。

environment-variables sh environment systemd
1个回答
0
投票

当你运行 /home/ec2-user/myserver/config/myserverVars.sh它是在一个新的进程中运行的,当它完成时,这个进程就会退出,所以对环境的所有改变都会丢失。你需要要求当前shell在不启动新进程的情况下执行脚本。这可以通过 source 命令,它也可以作为 "点 "命令使用。.. 所以使用

/bin/sh -c 'source /home/ec2-user/myserver/config/myserverVars.sh; ...'
© www.soinside.com 2019 - 2024. All rights reserved.