systemd 블로그에는 /etc/sysconfig 또는 /etc/default 사용을 권장하는 두 개의 기사가 포함되어 있습니다.
- http://0pointer.de/blog/projects/on-etc-sysinit.html
- http://0pointer.de/blog/projects/the-new-configuration-files.html
시스템 단위 파일에 대한 시스템별 옵션을 구성하는 몇 가지 대안은 무엇입니까?
내가 고려한 옵션:
- 대신 템플릿 단위를 만들고 지정자를 사용하세요.
단점은 서비스를 시작할 때마다 이 옵션을 지정해야 한다는 것입니다. 이는 주로 단일 서비스의 여러 복사본을 실행하는 데 사용되므로 실제로 적용할 수는 없습니다.
- 디렉터리를 사용하여
Execstart
로컬 장치 파일 덮어쓰기unitd.d
여기서 단점은 전체를 재정의해야 한다는 것입니다 Execstart
. 단순히 단일 옵션을 지정하는 데 사용할 수는 없습니다.
답변1
이는 구성하려는 옵션에 따라 다소 다릅니다. 폴더 위치(예: 홈 디렉터리, 런타임 디렉터리 등)인 경우 systemd는 변수를 통해 이를 제공합니다.
그렇지 않으면 환경 파일을 사용하여 옵션을 지정한 다음 서비스 단위가 해당 파일에 변수를 포함하도록 할 수 있습니다. 예를 들어 서비스 파일에는 일반적인 매개변수 외에 다음이 포함됩니다.
[Service]
Environment=ENV_OPTION_1=0 ENV_OPTION_2=linux
EnvironmentFile=/etc/default/program-name
ExecStart=/usr/bin/program $ENV_OPTION_1 ${ENV_OPTION_2}
EnvironmentFile
다음과 같은 키-값 쌍이 포함된 간단한 파일을 가리킵니다.
ENV_OPTION_1=8913
ENV_OPTION_2=ubuntu
Environment
아마도 당신이 원하는 기본 옵션입니다.
ExecStart
그런 다음 위와 같이 환경 값을 사용하십시오 . 값이 공백으로 구분될 수 있는 경우 이 구문이 필요합니다 ${}
.
답변2
내가 다른 곳에서 말했듯이(qv), 시스템 사람들은 당신이 조각 .conf
파일을 사용할 것이라고 기대하고 EnvironmentFile
이것이 나쁜 생각이며 그 사용이 실수라고 생각합니다.
여러 조각 파일을 가질 수도 있습니다.
# wibble.service.d/execstart.conf
[서비스]
ExecStart=
ExecStart=/usr/local/bin/wibble $OPTIONS0 $OPTIONS1
# wibble.service.d/options0.conf
[서비스]
Environment=OPTIONS0=--wobble
# wibble.service.d/options1.conf
[서비스]
Environment=OPTIONS1=--wubble