Como garantir que o sshd seja o último serviço interrompido durante o desligamento?

8

Percebi que, quando emito um rebootcomando, minha conexão SSH é imediatamente fechada no CentOS 7. Isso não significa que o servidor foi reiniciado, pois ainda posso fazer o ping.

Parece que o systemd está matando o sshd muito cedo. Às vezes, um serviço fica parado ao desligar ou fica lento, e não consigo mais fazer login para verificar o que está errado, mesmo que o servidor esteja funcionando.

Existe uma maneira de dizer ao systemd para matar apenas o sshd depois que todos os outros serviços estiverem inativos?

Giovanni Tirloni
fonte
8
Não é uma resposta para sua pergunta, mas um lembrete inútil: todos os servidores de produção devem ter acesso a KVM, placa de acesso remoto ou cabo serial. (embora, dependendo de onde o encerramento fica enrolando, mesmo aqueles podem ser inúteis)
Andrew B
4
Isso não será fácil; O systemd é agressivamente paralelo à inicialização e desligamento. Não apenas o ssh está sendo morto imediatamente, como muitos outros serviços, provavelmente incluindo o serviço suspenso. Entre no console (remoto) e dê uma olhada ou verifique os logs na próxima inicialização.
Michael Hampton
Talvez o pessoal do unix.stackexchange.com tenha um conselho melhor para modificar o processo de desligamento do systemd?
de Austin
Parece que o systemd usa alguns pedidos com base na configuração de inicialização para pedidos de desligamento: serverfault.com/questions/618612/… mas a referência é vaga e longa, acho que eles estão apontando você para DefaultDependencies - parece estar dizendo que, se necessário algo para iniciar, no desligamento, um serviço não será desligado antes do que depende.
Mary

Respostas:

1

Mesmo se você pudesse garantir que o SSH seja o último serviço a ser desligado, seria inútil, porque você perderá a conexão assim que os serviços de rede forem interrompidos.

Uma máquina Linux inicializada inicia todos os serviços em uma ordem predeterminada: primeiro os serviços mais vitais, o syslog, o firewall, depois a rede e, eventualmente, os aplicativos que requerem acesso à rede (servidor web, servidor SSH etc.). Ao desligar, esses serviços são interrompidos na ordem inversa. Então você perderá a conexão SSH quase imediatamente.

O fato de o SSH já estar inativo enquanto você ainda pode executar ping na máquina remota é normal.

dr_
fonte
0

Isso é um pouco complicado, mas que tal adicionar algo como:

ExecStopPre=sleep 60

para a seção "[Serviço]" de /usr/lib/systemd/system/sshd.service? Isso não garantiria a ordem dos desligamentos, mas se você pudesse tolerar um tempo de desligamento mais longo, poderia permitir que você mantivesse seu shell ativo por tempo suficiente para verificar se tudo terminava bem ou para dar uma olhada rápida. Não tenho certeza se isso é útil no caso geral, pois provavelmente é tarde demais para abortar um desligamento problemático nesse estágio, mas pode ser útil em uma situação em que você tenha um problema recorrente durante o desligamento que está tentando depurar.

Paul Stauffer
fonte
-5

Não sei ao certo o que você procura aqui, mas a primeira coisa em que se pensa é renice o processo.

Portanto, no seu caso, você pode renomear o processo pai sshd:

       renice PRIO_MAX -p pid-of-sshd
ostendali
fonte
Isso mudará sua prioridade no agendamento da CPU para quase em tempo real, mas nada mais.
Falcon Momot