systemd는 패키지 구성 단위 파일을 재정 의하여 서비스 구성 / 동작에 영향을주는 훌륭한 메커니즘을 제공한다는 것을 알고 있습니다. 이것은 일반적으로 아래 명령을 사용하여 수행됩니다
sudo systemctl edit <unitfile>
에 대체 conf 파일을 만들려면
/etc/systemd/system/<unitfile.d>/
Systemd는 템플릿 단위 파일을 정의하고 런타임에 인스턴스 별 단위를 생성하도록 인스턴스화하는 별도의 메커니즘도 제공합니다. 템플릿 파일 이름을 다음과 같이 지정해야합니다.
<servicename>@.service
다음으로 인스턴스화
systemctl start <servicename>@<instancename>
이제 패키지 제공 서비스를 여러 단위 인스턴스로 실행하려는 상황이 있습니다. 자체 템플릿 단위 파일을 만들지 않기 위해 패키지 제공 단위 파일을 재정 의하여 템플릿 단위 파일을 만들 수 있는지 확인하려고합니다.
내 이해에 따라 템플릿 단위 파일에는 일반 단위 파일과 다른 이름 지정 규칙이 있으므로 패키지 제공 단위 파일을 템플릿 파일로 / etc / systemd / system에 배치하여 재정의 할 수 없다고 생각합니다.
내가하려는 일을 달성 할 수있는 정의 된 방법이 있습니까?
특정 시나리오 : grafana 패키지는 grafana-server.service 단위 파일을 설치합니다. DEV와 STG 각각에 대해 두 개의 grafana 인스턴스를 내 컴퓨터에서 실행하고 싶습니다. 나는 이것을 할 수 있었다 :
- grafana-server.service 파일 수정 (% I를 사용하여 폴더 위치 및 파일 경로 설정)
- 수정 된 grafana-server.service의 이름을 grafana-server @ .service로 바꾸십시오.
-
다음을 사용하여 grafana 인스턴스를 시작하십시오.
sudo systemctl start grafana-server@dev
과
sudo systemctl start grafana-server@stg
그러나 이것은 grafana 제공 서비스 단위 파일의 링크를 끊어 업그레이드 할 때 서비스 파일을 향상시키는 경우이 활동을 다시 다시 실행해야합니다. 내 목표는 이러한 직접 종속성을 피하고 대신 재정의 종속성으로 변환하는 것입니다.
이견있는 사람?
답변
아래 두 옵션 모두 먼저 grafana-server.service (@없이)를 재정의하고 아무것도 시작하지 /etc/systemd/system
않도록 억제 ExecStart
(사용한다고 가정)하십시오. 켜기 /etc/systemd/system/grafana-server.service.d/10-disable-execstart.conf
:
[Service]
ExecStart=
WorkingDirectory=/path/to/your/confdir
옵션 1-일반 인스턴스로 대체
크리에이트 grafana-server@.service
다음과 같은 구성에 설정에 그 대응을 [Unit]
하고 [Service]
:
[Unit]
PartOf=grafana-server.service
ReloadPropagatedFrom=grafana-server.service
이들은 모든 인스턴스에 grafana-server 시작 / 중지 / 재시작을 바인딩해야합니다. 마법은 잘 문서화되어 있지 않습니다,하지만 당신은 넣어 경우 <instance_name>.conf
귀하의 파일을 /path/to/your/confdir
, 모든 인스턴스는 자동적으로 결합 될 것입니다!
옵션 2-특정 구성을 재정 의하여 패키지 구성 유지
패키지 서비스 파일에서 모든 업데이트 를 유지하고 있지만 기본 사용자 정의 인스턴스 옵션을 허용하려면 일반에서 각 인스턴스 이름에 대한 기호 링크를 작성하십시오.
/lib/systemd/system/grafana-server.service
에
/etc/systemd/system/grafana-service@<instance>.service
다음을 사용하여 해당 인스턴스의 특정 옵션 만 재정의하십시오.
/etc/systemd/system/grafana-server@<instance>.service.d/99-my-options.conf
에 다음과 같은 구성을 추가해야합니다 [Unit]
및 [Service]
에 99-my-options.conf
:
[Unit]
PartOf=grafana-server.service
ReloadPropagatedFrom=grafana-server.service
이것은 각 인스턴스에 대해 모든 grafana-server.service
옵션 을 가정 하고 99-my-options.conf
파일의 모든 옵션으로 옵션을 대체하고 시작 / 중지 / 다시 시작 조치를 grafana-server.service에 바인드합니다.
두 옵션 모두에서 실행하면
systemctl start grafana-server.service
/path/to/confdir/<instance>.conf
파일이있는 모든 인스턴스 가 시작됩니다. 서비스 이름 stop
과 동일하게 적용되며 restart
항상 grafana-server@<instance>
서비스 이름 을 사용하여 개별적으로 관리 할 수 있습니다 .