Come gestire un servizio systemd che necessita di più processi?


3

Ho un sito Web che richiede l'esecuzione di diversi processi (python, nodo, ecc.). Al momento ho creato un servizio systemd in modo da poter avviare e interrompere facilmente tali processi. Ho creato uno script iniziale che avvia tutti i processi di cui ho bisogno come processi in background (aggiungendo &alla fine del comando).

Questo mi impedisce di poter utilizzare la funzione di riavvio automatico di systemd quando qualcosa si arresta in modo anomalo poiché tutti i processi si avviano con un singolo script.

Una potenziale soluzione a cui riesco a pensare sarebbe quella di creare un servizio per ogni processo, e poi collegarli tutti insieme creando un servizio master a Requiresloro. Non sono un fan di questo perché significa che devo creare 4-5 servizi per ogni ambiente di questo sito Web che voglio eseguire.

Esiste un modo per definire facilmente un servizio che avvia più processi e li monitora singolarmente?


La tua potenziale soluzione è quella corretta. Altrimenti stai cercando di implementare nuovamente ciò che systemd sta già facendo per te: avviare / interrompere i servizi tenendo conto delle loro dipendenze.
Patrick Mevzek,

Risposte:


2

Crea diversi servizi di template , che sono chiamati con @questo:

  • website@.service
  • pythonthingy@.service
  • nodethingy@.service

Utilizzando i modelli, è possibile avviare un'istanza denominata per ciascun sito Web:

systemctl start pythonthingy@clientone.service nodethingy@clientone.service
systemctl start pythonthingy@clienttwo.service nodethingy@clienttwo.service

All'interno di tali unità modello, è possibile utilizzare %icome riferimento il nome dell'istanza ("clientone" in questo esempio). Quindi l'unità "principale" (servizio o destinazione) potrebbe avere:

[Unit]
Requires=pythonthingy@%i.service
...
[Service]
Environment="DOCROOT=/var/www/%i"

Se ogni sito richiede più parametri, è possibile caricarli da un file:

[Service]
EnvironmentFile=/etc/someconfigdir/%i.conf

Se alcuni siti richiedono impostazioni dell'unità non standard rispetto al resto, utilizzare i drop-in:

  • pythonthingy@.service - il modello comune
  • pythonthingy@clientone.service.d/overrides.conf - parametri extra solo per il client 1

Modelli, drop-in ed espansioni come% i sono spiegati in systemd.unit (5) .


Questo è esattamente quello che sto cercando, grazie.
Jesse,
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.