È possibile sovrascrivere un file di unità di sistema per creare un file di unità modello?


8

So che systemd fornisce un eccellente meccanismo per sovrascrivere un file di unità fornito dal pacchetto per influenzare la configurazione / il comportamento del servizio. Questo viene in genere eseguito utilizzando il comando seguente

sudo systemctl edit <unitfile>

per creare un file conf override su

/etc/systemd/system/<unitfile.d>/

Systemd fornisce anche un meccanismo separato per definire un file di unità modello e lo ha istanziato per creare unità specifiche dell'istanza in fase di esecuzione. Ciò richiede la denominazione del file modello come

<servicename>@.service

e quindi istanziarlo come

systemctl start <servicename>@<instancename>

Ora, ho una situazione in cui vorrei eseguire un servizio fornito dal pacchetto come istanze di più unità. Voglio evitare di creare il mio file di unità modello, quindi sto cercando di vedere se il file di unità fornito dal pacchetto può essere sostituito per creare il file di unità modello.

Dal momento che, per mia comprensione, il file di unità modello ha una convenzione di denominazione diversa dal normale file di unità, penso di non poter sovrascrivere il file di unità fornito dal pacchetto con un file di modello posizionandolo in / etc / systemd / system.

Esiste un modo definito per ottenere ciò che sto cercando di fare?

Scenario specifico: il pacchetto grafana installa un file di unità grafana-server.service. Voglio eseguire due istanze di grafana sulla mia macchina, una per DEV e STG. Sono stato in grado di fare questo:

  • modificare il file grafana-server.service (usando% I per impostare i percorsi delle cartelle e i percorsi dei file)
  • rinominare il grafana-server.service modificato in grafana-server @ .service
  • avviare istanze di grafana usando:

    sudo systemctl start grafana-server@dev
    

    e

    sudo systemctl start grafana-server@stg
    

Tuttavia, ciò interrompe il collegamento dal file di unità di servizio fornito da Grafana e se migliorano il file di servizio quando eseguo l'aggiornamento, dovrò ripetere nuovamente questa attività. Il mio obiettivo è evitare questa dipendenza diretta e convertirla invece in una dipendenza di sostituzione.

qualche idea?

Risposte:


6

Per entrambe le opzioni di seguito, innanzitutto sovrascrivere grafana-server.service (senza @) /etc/systemd/systeme sopprimere ExecStart(supponendo che lo utilizzi) per fare in modo che non inizi nulla. Su /etc/systemd/system/grafana-server.service.d/10-disable-execstart.conf:

[Service]
ExecStart=
WorkingDirectory=/path/to/your/confdir

Opzione 1 - Sostituzione con istanze generiche

Crea un grafana-server@.servicecorrispondente alle tue impostazioni con la seguente configurazione a [Unit]e [Service]:

[Unit]
PartOf=grafana-server.service
ReloadPropagatedFrom=grafana-server.service

Questi dovrebbero associare l'avvio / arresto / riavvio di grafana-server a tutte le istanze insieme. La magia non è molto ben documentata, ma se metti i <instance_name>.conffile sul tuo /path/to/your/confdir, tutte quelle istanze saranno automaticamente legate!

Opzione 2: sovrascrivere istanze specifiche per mantenere la configurazione del pacchetto

Se si desidera mantenere tutta la qualità degli aggiornamenti dal file del servizio pacchetti, ma accettare le opzioni di istanze personalizzate principali, creare un collegamento simbolico per ogni nome di istanza da generico

/lib/systemd/system/grafana-server.service

per

/etc/systemd/system/grafana-service@<instance>.service

e quindi sovrascrivere solo le opzioni specifiche di quell'istanza utilizzando

/etc/systemd/system/grafana-server@<instance>.service.d/99-my-options.conf

Assicurarsi di aggiungere la seguente configurazione per [Unit]e [Service]da 99-my-options.conf:

[Unit]
PartOf=grafana-server.service
ReloadPropagatedFrom=grafana-server.service

Ciò presupporrà per ogni istanza tutte le grafana-server.serviceopzioni e le sovrascriverà con tutte le opzioni sul 99-my-options.conffile e assocerà anche le azioni di avvio / arresto / riavvio a grafana-server.service.

Su entrambe le opzioni, se corri

systemctl start grafana-server.service

/path/to/confdir/<instance>.confverranno avviate tutte le istanze che hanno un file. Lo stesso vale per stope restartAND, puoi sempre gestirli individualmente usando il loro grafana-server@<instance>nome di servizio.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.