[server] 템플릿 단위 파일을 만들기 위해 시스템 단위 파일을 재정의 할 수 있습니까?

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>서비스 이름 을 사용하여 개별적으로 관리 할 수 ​​있습니다 .


답변