Wie kann sichergestellt werden, dass sshd der letzte Dienst ist, der während des Herunterfahrens gestoppt wird?

8

Ich habe festgestellt, dass rebootmeine SSH-Verbindung bei der Ausgabe eines Befehls unter CentOS 7 sofort geschlossen wird. Dies bedeutet nicht, dass der Server neu gestartet wurde, da ich ihn weiterhin anpingen kann.

Es scheint, dass systemd sshd zu früh tötet. Manchmal bleibt ein Dienst beim Herunterfahren hängen oder ist nur langsam, und ich kann mich nicht mehr anmelden, um zu überprüfen, was falsch ist, obwohl der Server hochgefahren ist.

Gibt es eine Möglichkeit, systemd anzuweisen, sshd erst zu töten, nachdem alle anderen Dienste ausgefallen sind?

Giovanni Tirloni
quelle
8
Keine Antwort auf Ihre Frage, aber eine nicht hilfreiche Erinnerung: Alle Produktionsserver sollten über KVM, RAS-Karte oder seriellen Kabelzugriff verfügen. (obwohl je nachdem, wo die Abschaltung blockiert, können auch diese nutzlos sein)
Andrew B
4
Dies wird nicht einfach sein; systemd ist aggressiv parallel zum Starten und Herunterfahren. SSH wird nicht nur sofort getötet, sondern auch viele andere Dienste, wahrscheinlich auch der Dienst, der hängt. Rufen Sie die (Remote-) Konsole auf und sehen Sie sich die Protokolle beim nächsten Start an.
Michael Hampton
Vielleicht hätten die guten Leute von unix.stackexchange.com bessere Ratschläge, um den Prozess zum Herunterfahren des Systems zu ändern ?
austinian
Es scheint, dass systemd eine Reihenfolge basierend auf der Startkonfiguration für die Reihenfolge des Herunterfahrens verwendet: serverfault.com/questions/618612/…, aber die Referenz ist vage und lang. Ich denke, sie weisen Sie auf DefaultDependencies hin - es scheint zu sagen, dass dies erforderlich ist etwas zum Starten, beim Herunterfahren wird ein Dienst nicht vor dem Ding heruntergefahren, von dem es abhängt.
Mary

Antworten:

1

Selbst wenn Sie sicherstellen könnten, dass SSH der letzte Dienst ist, der heruntergefahren wird, wäre dies sinnlos, da Sie die Verbindung verlieren, sobald die Netzwerkdienste gestoppt werden.

Ein Linux-Computer, der startet, startet alle Dienste in einer festgelegten Reihenfolge: zuerst die wichtigsten Dienste, das Syslog, die Firewall, dann das Netzwerk und schließlich die Anwendungen, die Netzwerkzugriff erfordern (Server-Web, Server-SSH usw.). Beim Herunterfahren werden diese Dienste in umgekehrter Reihenfolge gestoppt. Sie verlieren also fast sofort die SSH-Verbindung.

Die Tatsache, dass SSH bereits ausgefallen ist, während Sie den Remotecomputer noch anpingen können, ist normal.

DR_
quelle
0

Dies ist ein bisschen wie ein Hack, aber was ist mit dem Hinzufügen von etwas wie:

ExecStopPre=sleep 60

zum Abschnitt "[Service]" von /usr/lib/systemd/system/sshd.service? Das würde die Reihenfolge der Abschaltungen nicht garantieren, aber wenn Sie eine längere Abschaltzeit tolerieren könnten, könnten Sie Ihre Shell möglicherweise lange genug aktiv halten, um zu überprüfen, ob alles andere in Ordnung ist, oder um schnell herumzustöbern. Ich bin mir nicht sicher, ob dies im allgemeinen Fall hilfreich ist, da es wahrscheinlich zu spät ist, ein problematisches Herunterfahren zu diesem Zeitpunkt ohnehin abzubrechen. Dies kann jedoch in Situationen hilfreich sein, in denen beim Herunterfahren ein wiederkehrendes Problem auftritt, das Sie zu debuggen versuchen.

Paul Stauffer
quelle
-5

Ich bin mir nicht sicher, wonach Sie hier suchen, aber das erste, woran man denken wird, ist, den Prozess zu wiederholen.

In Ihrem Fall können Sie also den übergeordneten sshd-Prozess erneut ausführen:

       renice PRIO_MAX -p pid-of-sshd
ostendali
quelle
Dadurch wird die Priorität bei der CPU-Planung auf nahezu Echtzeit geändert, aber sonst nichts.
Falcon Momot