환경 파일을 설정하기 위해 Commando 소스를 사용해야 하는 애플리케이션이 있습니다.
[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"
공급업체 요구 사항으로 인해 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
명령으로 설정된 환경에 따라 달라지나요? 이러한 줄은 실제로 동일한 셸에서 실행되지 않기 때문에 환경을 공유할 것이라고 기대할 수 없습니다. 필요한 것은 Environment
유닛 파일에서 키워드를 사용하는 것입니다. 이렇게 하면 ExecStart
파일에 정의된 환경을 얻을 수 있습니다.
https://coreos.com/os/docs/latest/using-environment-variables-in-systemd-units.html