Comment s'assurer que sshd est le dernier service à être arrêté pendant l'arrêt?

8

J'ai remarqué que lorsque j'émets une rebootcommande, ma connexion SSH est immédiatement fermée sur CentOS 7. Cela ne signifie pas que le serveur a redémarré, car je peux toujours le cingler.

Il semble que systemd tue sshd trop tôt. Parfois, un service s'arrête ou s'arrête, et je ne peux plus me connecter pour vérifier ce qui ne va pas même si le serveur est en marche.

Existe-t-il un moyen de dire à systemd de ne tuer sshd qu'après l'arrêt de tous les autres services?

Giovanni Tirloni
la source
8
Pas une réponse à votre question, mais un rappel inutile: tous les serveurs de production doivent avoir un accès KVM, carte d'accès à distance ou câble série. (bien que selon l'endroit où l'arrêt est au point mort, même ceux-ci peuvent être inutiles)
Andrew B
4
Ceci ne sera pas facile; systemd est agressivement parallèle au démarrage et à l'arrêt. Non seulement ssh est tué immédiatement, tout comme de nombreux autres services, y compris probablement le service suspendu. Accédez à la console (distante) et jetez un œil, ou consultez les journaux au prochain démarrage.
Michael Hampton
Peut-être que les bons employés de unix.stackexchange.com auraient de meilleurs conseils pour modifier le processus d'arrêt de systemd?
austinian
Il semble que systemd utilise un ordre basé sur la configuration de démarrage pour l'ordre d'arrêt: serverfault.com/questions/618612/… mais la référence est vague et longue, je pense qu'ils vous dirigent vers DefaultDependencies - il semble dire que si cela a besoin quelque chose à démarrer, à l'arrêt un service ne sera pas arrêté avant la chose dont il dépend.
Mary

Réponses:

1

Même si vous pouviez vous assurer que SSH est le dernier service à être arrêté, cela serait inutile, car vous perdrez la connexion dès que les services réseau seront arrêtés.

Une machine Linux qui démarre démarre tous les services dans un ordre prédéterminé: d'abord les services les plus vitaux, le syslog, le pare-feu, puis le réseau, et éventuellement les applications nécessitant un accès réseau (serveur web, serveur SSH, etc.). Lors de l'arrêt, ces services sont arrêtés dans l'ordre inverse. Vous perdrez donc la connexion SSH presque immédiatement.

Le fait que SSH soit déjà arrêté alors que vous pouvez toujours envoyer une requête ping à la machine distante est normal.

dr_
la source
0

C'est un peu un hack, mais qu'en est-il de l'ajout de quelque chose comme:

ExecStopPre=sleep 60

à la section "[Service]" de /usr/lib/systemd/system/sshd.service? Cela ne garantirait pas l'ordre des arrêts, mais si vous pouviez tolérer un temps d'arrêt plus long, cela pourrait vous permettre de garder votre shell actif assez longtemps pour vérifier que tout le reste s'est bien terminé, ou pour faire un tour rapide. Je ne sais pas si cela est utile dans le cas général, car il est probablement trop tard pour abandonner un arrêt problématique à ce stade de toute façon, mais cela pourrait être utile dans une situation où vous avez un problème récurrent pendant l'arrêt que vous essayez de déboguer.

Paul Stauffer
la source
-5

Je ne suis pas sûr de ce que vous recherchez ici, mais la première chose à laquelle vous penserez est de renouer le processus.

Donc, dans votre cas, vous pouvez modifier le processus parent sshd:

       renice PRIO_MAX -p pid-of-sshd
ostendali
la source
Cela changera sa priorité dans la planification du processeur en quasi-temps réel, mais rien d'autre.
Falcon Momot