GNU/Linux >> Linux Esercitazione >  >> Linux

Perché la maggior parte degli esempi di Systemd contiene Wantedby=multi-user.target?

Ho letto cos'è multi-user.target e la documentazione di systemd, che afferma che multi-user.target è un obiettivo speciale. Inoltre, molti degli esempi di systemd contengono quella riga.

  1. Perché così tanti servizi di esempio contengono quella riga?
  2. Cosa accadrebbe se non contenessero WantedBy=multi-user.target?
  3. Potresti farmi un esempio di quando sarebbe effettivamente consigliabile non includere quella riga nella definizione di un file di servizio?
  4. Sempre sulla stessa linea, quando è una buona idea mantenere quella linea?

Risposta accettata:

1.) multi-user.target è fondamentalmente l'equivalente più vicino del classico runlevel 3 di SysVinit che systemd ha. Quando un systemd il sistema si avvia, systemd sta cercando di far corrispondere lo stato del sistema allo stato specificato da default.target – che di solito è un alias per graphical.target o multi-user.target .

multi-user.target normalmente definisce uno stato del sistema in cui tutti i servizi di rete vengono avviati e il sistema accetterà gli accessi, ma non viene avviata una GUI locale. Questo è lo stato di sistema predefinito tipico per i sistemi server, che potrebbero essere sistemi headless montati su rack in una sala server remota.

graphical.target è un altro possibile alias per default.target . Normalmente è definito come un superset di multi-user.target :include tutto il multi-user.target fa, oltre all'attivazione di un login GUI locale. Un po' come il runlevel 5 nel classico SysVinit.

La riga WantedBy=multi-user.target in un servizio equivale essenzialmente a specificare "questo servizio dovrebbe iniziare nei runlevel 3, 4 e 5" nei sistemi SysVinit:dice a systemd che questo servizio dovrebbe essere avviato come parte del normale avvio del sistema, indipendentemente dal fatto che sia attiva o meno una GUI locale.

Tuttavia, WantedBy è separato dallo stato abilitato/disabilitato:quindi, in un altro senso, è una sorta di "preimpostazione":determina in quali condizioni può avvenire l'avvio automatico, ma solo quando il servizio è abilitato in primo luogo.

2.) se ometti WantedBy=multi-user.target line e nessun altro servizio abilitato include un Requires=your.service o Wants=your.service nella sua definizione di servizio, il tuo servizio non verrà avviato automaticamente.

systemd funziona sulle dipendenze e all'avvio, se non nulla Requires o Wants il tuo servizio, non verrà avviato anche se il servizio è abilitato.

Certo, puoi modificare il tuo default.target per aggiungere o eliminare Requires o Wants righe per tutti i servizi che desideri vengano avviati all'avvio, ma in modo da poter semplicemente rilasciare un nuovo file di servizio nel sistema e farlo funzionare per impostazione predefinita (il che rende le cose molto facili per i gestori di pacchetti software), systemd ha il WantedBy e RequiredBy parole chiave che possono essere utilizzate per inserire Wants e Requires -tipo dipendenze (rispettivamente) da "l'altra estremità".

Correlati:Ubuntu – systemd "attivazione socket" vs xinetd?

3.) Dovresti omettere la riga se non desidera che il servizio venga avviato automaticamente all'avvio, o questo servizio fa parte di una catena di dipendenze che hai definito in modo esplicito.

Ad esempio, potresti eseguire il refactoring dell'applicazione server A e per un motivo o per l'altro decidere di suddividere alcune funzionalità facoltative in un servizio separato B, per consentire all'utente di scegliere di non installarlo se non è necessario. È quindi possibile rendere il servizio B un service-B.rpm separato e definisci B.service con WantedBy=A.service per creare systemd avvia automaticamente il servizio B ogni volta che viene avviato il servizio A, ma solo quando service-B.rpm è effettivamente installato.

Nota che un Wants o WantedBy dice solo che il sistema dovrebbe avviare un servizio ogni volta che viene avviato anche un altro servizio o destinazione, ma non specifica nulla sull'ordine di avvio/arresto. Se è necessario che il servizio B sia già in esecuzione all'avvio del servizio A, è necessario aggiungere Before=A.service nel B.service per specificare in modo esplicito la dipendenza dell'ordine di avvio.

4.) Ogni volta che lo fai desidera che il servizio abbia la capacità di essere avviato automaticamente all'avvio e che non ci siano altre dipendenze già definite.


Linux
  1. 10 pratici comandi di sistema:un riferimento

  2. Aggiunta di un nuovo servizio a Linux systemd

  3. Systemd legge /etc/pm/…?

  4. Esempi di comandi systemctl in Linux

  5. Come interrompere il servizio systemd

Comandi Systemctl per gestire il servizio Systemd

Utilizzo delle funzionalità di systemd per proteggere i servizi

Gestire cgroup con systemd

systemd-analyze Esempi di comandi in Linux

Fai in modo che il servizio utente di systemd dipenda dalla destinazione del sistema

Come eseguire uno script con systemd subito prima dell'arresto?