저는 이미 만들어진 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
의 변수는 /home/ec2-user/myserver/config/myserverVars.sh
설정되지 않으며 서버는 변수 없이 시작되는데, 이는 오류입니다. 환경 키나 환경 파일을 사용하지 않으려고 합니다.
답변1
스크립트 파일에 정의된 변수를 스크립트를 실행하는 상위 환경에서 사용할 수 있게 하려면 다음이 필요합니다.원천스크립트를 실행하는 대신 줄 ExecStart
을 다음으로 변경하십시오.
ExecStart=/bin/sh -c '. /home/ec2-user/myserver/config/myserverVars.sh ;/home/ec2-user/venv/bin/python /home/ec2-user/myserver/myserver.py >> /home/ec2-user/myserver/logs/systemd_myserver.log 2>&1 '
바라보다소싱("." 또는 "source")과 bash에서 파일 실행의 차이점은 무엇입니까?스크립트 가져오기와 스크립트 실행 간의 차이점에 대한 자세한 내용입니다.
또한 리디렉션 순서를 변경했습니다. stderr과 stdout을 동일한 파일로 가져 > file 2>&1
오려면 2>&1 > file
.
답변2
나에게 이것은 작동합니다 :
ExecStart=/bin/bash -c 'MYVAR=xx exec /some/file'