시스템화된 bash 내장 기능

시스템화된 bash 내장 기능

환경 파일을 설정하기 위해 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

관련 정보