Dipendenze Systemd e ordine di avvio


20

Devo specificare un ordine di avvio per l'avvio dei processi. Ho 389 Directory Server e Samba in esecuzione su Fedora 18. Come posso avviare i servizi di rete, quindi 389 DS, quindi Samba? C'è una GUI per gestirlo in Fedora?

Ho abilitato Samba per iniziare systemctl enable smb.service. Ho anche abilitato 389 DS con systemctl enable dirsrv.target.


Systemd non richiede ordine tra i servizi, l'idea è di avviare tutto in parallelo e consegnare le connessioni ai server non appena disponibili. La configurazione fornita dall'installazione predefinita dovrebbe andare bene. Perché pensi di dover definire un ordine? Qualcosa non funziona?
vonbrand,

Dovrei anche notare, dal momento che questo è tornato, che davvero non dovresti eseguire servizi di file / stampa sul tuo controller di dominio.
Michael Hampton

@vonbrand Ho avuto questo problema, in cui il mio server DHCP aveva bisogno di essere slapd (perché la sua configurazione era memorizzata in una directory LDAP). In caso contrario, il server DHCP non verrebbe visualizzato.
mat

Risposte:


25

Utilizzare systemctl edit smb.serviceper aggiornare le dipendenze.

After=dirsrv.target - Assicurerà che smb.service sia avviato dopo dirsrv.target.

Per robustezza, (che varrà la pena se stai armeggiando con questa roba) potresti anche voler includere alcuni dei seguenti:

Requires=dirsrv.target- Attiva dirsrv.target quando smb.service è attivato. Provocherà il fallimento di smb.service se fallisce dirsrv.target.

Wants=dirsrv.target- Attiva dirsrv.target quando smb.service è attivato. Non farà in modo che smb.service fallisca se fallisce dirsrv.target.

BindsTo=dirsrv.target - Se dirsrv.target è disattivato, disattivare smb.service.

Fonte: http://www.freedesktop.org/software/systemd/man/systemd.unit.html

systemd-uifornisce una GUI per systemd. Offre una buona visione dello stato di systemd ma dovrai comunque utilizzare un editor di testo per modificare i file di unità.


In un caso A richiede B , cosa dirà che "B" ha "fallito" in modo che A non venga avviato? Il programma di B restituisce un valore diverso da zero?
John Wang,

2
Sottovalutato perché ciò consiglia cattive pratiche. Non modificare le /usr/lib/systemdversioni dei file di unità a meno che tu non sia un manutentore della distribuzione o non ti piaccia che i tuoi file vengano sovrascritti ad ogni aggiornamento del pacchetto. Copiare il file dell'unità in /etc/systemde quindi modificarlo oppure utilizzare un file drop-in (vedere systemd.unit (5) per i dettagli). Ancora più semplice, basta usare ciò systemctl edit smb.serviceche fa automaticamente la magia del file drop-in!
Jeremy Visser l'

3
Grazie per aver modificato la risposta! Risolve i problemi e mi sono convertito in un voto. :-)
Jeremy Visser il

10

Fai due cose:

  1. Modifica il /lib/systemd/system/smb.servicefile dell'unità, per specificare la dipendenza. La [unit]sezione contiene una After=riga che specifica quali servizi / target devono essere raggiunti prima di questo.

    After=syslog.target network.target nmb.service winbind.service
    

    Modificalo in:

    After=dirsrv.target syslog.target network.target nmb.service winbind.service
    
  2. Segnala questa dipendenza a Fedora come un bug , in modo che possa essere incorporata nelle versioni future.


Non sembra funzionare. Samba è ancora in fase di avvio prima del 389.
Dylan Klomparens,

3
dopo aver modificato i unitfile, di solito dovresti eseguiresystemctl daemon-reload
scottyseus il

2

potresti aver bisogno di cambiare o includere una riga con la Requiresdirettiva nella [Unit] sezione del /usr/lib/systemd/system/smb.servicefile.

Requires=dirsrv.target

e

After=dirsrv.target

Bene, ho votato per questa risposta, tuttavia, andrei personalmente con Wants = dirsrv.target invece di Requisito =. (vedi systemd.unit (5) per Wants =)
galaxy

2

Esistono due alternative per modificare il file di servizio /usr/lib/systemd/system(vedere Esempio 2. Sostituzione delle impostazioni del fornitore ):

  1. Copia il file /etc/systemd/systemed esegui le modifiche sulla copia. Questo file sostituirà completamente il file /usr/lib.

  2. Crea il file /etc/systemd/system/smb.service.d/local.conf. Il contenuto del file dovrebbe essere simile all'esempio seguente. Ciò sostituisce selettivamente le opzioni "Richiede" e "Dopo" nel file di servizio fornito dal fornitore.

Ognuno di questi (inclusa la modifica del file in /usr/lib) offre vantaggi e svantaggi. La scelta migliore può dipendere dal servizio e dalla natura delle modifiche.

Sebbene possa funzionare, non è sufficiente aggiungere solo l'opzione "Dopo" (vedere Opzioni della sezione [Unità] ). "Dopo" controlla l'ordine, ma non le dipendenze. Se dirsrv.targetnon viene avviato in altro modo, la specifica di un ordine non lo avvierà. L'uso dell'opzione "Richiede" o "Vuole" forzerà dirsrv.targetl'avvio.

[Unit]
Requires=dirsrv.target
After=dirsrv.target

NB: Non so se questo approccio fosse disponibile quando questa domanda è stata inizialmente posta.

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.