Come garantire che sshd sia l'ultimo servizio ad essere arrestato durante l'arresto?


8

Ho notato che quando eseguo un rebootcomando, la mia connessione SSH viene immediatamente chiusa su CentOS 7. Ciò non significa che il server sia stato riavviato, poiché posso ancora eseguire il ping.

Sembra che systemd stia uccidendo sshd troppo presto. A volte un servizio si blocca all'arresto o semplicemente rallenta e non riesco più ad accedere per verificare cosa non va anche se il server è attivo.

C'è un modo per dire a systemd di uccidere sshd solo dopo che tutti gli altri servizi sono inattivi?


8
Non una risposta alla tua domanda, ma un promemoria inutile: tutti i server di produzione dovrebbero avere KVM, scheda di accesso remoto o accesso via cavo seriale. (anche se a seconda di dove si sta arrestando l'arresto, anche quelli potrebbero essere inutili)
Andrew B,

4
Questo non sarà facile; systemd è aggressivamente parallelo all'avvio e allo spegnimento. Non solo ssh viene ucciso immediatamente, ma lo sono anche molti altri servizi, incluso probabilmente il servizio sospeso. Sali sulla console (remota) e dai un'occhiata o controlla i log al prossimo avvio.
Michael Hampton,

Forse le brave persone su unix.stackexchange.com avrebbero consigli migliori per modificare il processo di spegnimento del sistema?
austinian,

Sembra che systemd utilizzi un po 'di ordinamento basato sulla configurazione di avvio per l'ordinamento di arresto: serverfault.com/questions/618612/… ma il riferimento è vago e lungo, penso che ti stiano indirizzando verso DefaultDependencies - sembra dire che se è necessario qualcosa da avviare, allo spegnimento un servizio non verrà arrestato prima della cosa da cui dipende.
Mary,

Risposte:


1

Anche se si potesse garantire che SSH sia l'ultimo servizio da chiudere, sarebbe inutile, perché si perderà la connessione non appena i servizi di rete verranno interrotti.

Una macchina Linux che avvia avvia tutti i servizi in un ordine predeterminato: prima i servizi più vitali, il syslog, il firewall, quindi la rete e infine le applicazioni che richiedono l'accesso alla rete (server web, server SSH, ecc.). Alla chiusura, questi servizi vengono arrestati in ordine inverso. Quindi perderai la connessione SSH quasi immediatamente.

Il fatto che SSH sia già inattivo mentre è ancora possibile eseguire il ping del computer remoto è normale.


0

Questo è un po 'un trucco, ma per quanto riguarda l'aggiunta di qualcosa di simile:

ExecStopPre=sleep 60

alla sezione "[Servizio]" di /usr/lib/systemd/system/sshd.service? Ciò non garantirebbe l'ordinamento degli arresti, ma se si potesse tollerare un tempo di arresto più lungo, potrebbe consentire di mantenere la shell attiva abbastanza a lungo per verificare che tutto il resto sia terminato correttamente o per fare qualche giro veloce. Non sono sicuro che ciò sia utile nel caso generale, poiché probabilmente è troppo tardi per interrompere un arresto problematico in questa fase, ma potrebbe essere utile in una situazione in cui si verifica un problema ricorrente durante l'arresto che si sta tentando di eseguire il debug.


-5

Non sono sicuro di cosa tu stia cercando qui, ma la prima cosa a cui penserai è di rinominare il processo.

Quindi nel tuo caso puoi rinominare il processo genitore sshd:

       renice PRIO_MAX -p pid-of-sshd

Ciò cambierà la sua priorità nella programmazione della CPU in quasi in tempo reale, ma nient'altro.
Falcon Momot,
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.