Fix a SUSE Linux Server Hanging on Reboot at systemd Shutdown

If a SUSE Linux server appears to hang during reboot at a systemd shutdown message, the most useful first assumption is not that the reboot command itself is broken. In most cases, systemd is waiting for a unit, mount, process, or shutdown hook to finish. The safest fix is therefore to identify the exact job that is still running, inspect why it does not stop, and correct that component rather than globally shortening shutdown timeouts.

This guide uses a hypothetical example throughout: a server named lab-sles01 runs SUSE Linux Enterprise Server and pauses during reboot with a message similar to A stop job is running for backup.service. The example is only an illustration of the diagnostic method; it is not a report of a real test or a claim that a particular SUSE release has a defect in a service named backup.service.

The four-step fix in brief

StepWhat to doWhat you are trying to learn
1Record the exact shutdown messageWhich unit or stage is blocking progress
2Review the previous boot journalWhether the stop timed out, an unmount failed, or shutdown reached a later stage
3Inspect the blocking unit and live jobsWhether a service, mount, inhibitor, or dependency is responsible
4Fix the root cause and retestWhether a normal systemctl reboot now completes without delay

Step 1: Record exactly where shutdown stops

Watch the local console, virtual machine console, BMC/IPMI console, or hypervisor console during a planned reboot. A line naming a unit is far more useful than a general description such as “systemd froze.” For the hypothetical lab-sles01, suppose the console shows that backup.service is still stopping while other units have already shut down.

Exemplo ilustrativo do console de desligamento do SUSE Linux mostrando uma tarefa de parada ainda em execução para o serviço backup.service.

Illustrative example: the shutdown console identifies backup.service as the unit systemd is still waiting for.

If the console instead names a .mount unit, a network file system, a device, or another service, follow that name rather than applying a generic service timeout. The unit shown at the bottom of the console is a clue, not automatically the root cause: it may itself be waiting on a child process, storage, network I/O, or another dependency.

SUSE's current systemd guidance notes that a long reboot or poweroff can be caused by a service that is not exiting and recommends checking systemd jobs. See SUSE Linux Enterprise Server 16.0: Introduction to systemd Basics.

Step 2: Use the previous boot journal after the server returns

After the machine boots again, inspect the shutdown that just happened. SUSE documents boot offsets in the journal: boot 0 is the current boot, -1 is the previous boot, and so on. Start with:

sudo journalctl --list-boots
sudo journalctl -b -1

Para um periódico extenso, a ordem inversa pode revelar as últimas mensagens mais rapidamente:

sudo journalctl -b -1 -r

Terminal ilustrativo mostrando entradas do comando `journalctl -b -1` onde o serviço de backup (`backup.service`) atinge o tempo limite durante o desligamento.

Exemplo ilustrativo: o registro de inicialização anterior mostra o hipotético serviço de backup recebendo SIGTERM e posteriormente atingindo o tempo limite.

Procure por frases como Stopping, stop job, timed out, Failed with result, Unmounting, Dependency failed, ou mensagens do próprio serviço suspeito. Você pode refinar a busca assim que souber o nome da unidade:

sudo journalctl -b -1 -u backup.service

A SUSE documenta journalctl -b -1a análise de inicializações anteriores em sua documentação do journal do SLES 15 SP7 . Se journalctl --list-bootso journal não contiver a inicialização anterior, não tire conclusões precipitadas com base na ausência do histórico; verifique como o armazenamento do journald está configurado e use o console ou o registro remoto para a próxima reprodução.

Etapa 3: Identifique se o bloqueador é um serviço, um ponto de montagem, um inibidor ou um gancho de desligamento tardio.

Se você conseguir reproduzir o problema durante uma janela de manutenção, mantenha um segundo console administrativo disponível. Antes que a conectividade seja perdida, execute o seguinte comando:

sudo systemctl list-jobs
sudo systemctl status backup.service

Terminal ilustrativo mostrando os comandos `systemctl list-jobs` e `systemctl status` para um serviço de backup em processo de parada.

Exemplo ilustrativo: backup.servicepossui uma tarefa de parada em execução enquanto o alvo de reinicialização aguarda em segundo plano.

As diretrizes de depuração do systemd explicam que as tarefas exibidas como `none` runningdevem ser concluídas antes que as tarefas dependentes exibidas como `none` waitingpossam prosseguir. A SUSE também recomenda o uso de `none` systemctl list-jobsquando o desligamento ou a reinicialização demoram muito. Isso torna este comando particularmente útil quando o servidor não está totalmente congelado e o PID 1 ainda está respondendo.

Se um serviço estiver parando muito lentamente

Inspecione a definição da unidade e seu comportamento de desligamento:

sudo systemctl cat backup.service
sudo systemctl status backup.service
sudo journalctl -u backup.service -b

Verifique se o serviço possui alguma ExecStop=ação em andamento, se o processo dele está lidando com o sinal SIGTERM e se ele está aguardando recursos de armazenamento ou de rede. Um banco de dados, um agente de backup ou um serviço de middleware pode realmente precisar de tempo para liberar os dados, portanto, encerrá-lo antes não resolve o problema automaticamente.

Se houver uma montagem ou um sistema de arquivos de rede envolvido

Procure por operações de desmontagem com falha e identifique a origem da montagem:

findmnt
systemctl list-units --type=mount
sudo journalctl -b -1 | grep -Ei 'unmount|umount|mount|nfs|cifs'

Para NFS ou CIFS, investigue a acessibilidade do servidor, sessões obsoletas e se as opções de montagem atendem aos requisitos de desligamento do servidor. Se a unidade bloqueada for gerada a partir de /etc/fstab, corrija a configuração de montagem em vez de aplicar um tempo limite específico do serviço a uma unidade não relacionada.

Se a solicitação de reinicialização estiver sendo inibida

Antes do início do desligamento, você pode listar os inibidores do systemd ativos:

systemd-inhibit --list

Os bloqueios de inibição podem bloquear ou atrasar solicitações de desligamento enquanto um aplicativo está executando tarefas que não devem ser interrompidas. Eles são mais relevantes quando a própria solicitação de reinicialização é atrasada antes que o sistema entre na sequência final de desligamento. Consulte o manual do systemd-inhibit .

Se o travamento ocorrer depois que os serviços já estiverem inativos, isso acontecerá se o serviço já estiver desligado.

Uma paralisação em um estágio posterior exige uma investigação diferente. O systemd executa arquivos executáveis /usr/lib/systemd/system-shutdown/​​pouco antes da reinicialização ou desligamento final e aguarda a conclusão deles. Se o journal e o console mostrarem que os serviços comuns já foram interrompidos e a paralisação ocorrer no estágio final de desligamento, revise esse diretório e quaisquer hooks instalados pelo fornecedor. A documentação do serviço de desligamento do systemd descreve esse comportamento.

Passo 4: Conserte o componente e, em seguida, teste uma reinicialização normal.

Voltando ao exemplo hipotético lab-sles01, suponha que os logs mostrem que o serviço backup.serviceignora o encerramento normal após a conclusão do processo de backup. A primeira opção é corrigir o serviço ou o comando de parada. Se for sabido que o serviço pode ser encerrado com segurança após um período limitado, uma configuração específica do systemd por unidade pode limitar o tempo de espera do systemd.

Crie uma substituição em vez de editar uma unidade de fornecedor em /usr/lib/systemd/system:

sudo systemctl edit backup.service

Por exemplo:

[Service]
TimeoutStopSec=30s

Em seguida, recarregue a configuração da unidade do systemd:

sudo systemctl daemon-reload

Terminal ilustrativo mostrando uma sobrescrita do serviço systemd com TimeoutStopSec=30s, seguida por daemon-reload e reinicialização.

Exemplo ilustrativo: um tempo limite por serviço é aplicado somente depois que o serviço hipotético for identificado como o bloqueador.

Não copie o valor de 30 segundos cegamente. O tempo limite correto depende do que o serviço real precisa concluir com segurança. Reduzir esse tempo limite para um banco de dados, daemon de armazenamento, serviço em cluster ou processo de backup pode interromper a limpeza legítima. Um tempo limite é uma medida de segurança, não um substituto para corrigir uma ExecStop=ação com falha ou um aplicativo que não seja encerrado corretamente.

Quando estiver satisfeito com a alteração, teste uma reinicialização normal:

sudo systemctl reboot

Após o computador reiniciar, revise novamente a inicialização anterior e confirme se a unidade foi desativada corretamente, em vez de simplesmente desaparecer do console.

Quando você deve usar uma reinicialização forçada?

Uma reinicialização forçada é uma opção de recuperação, não uma estratégia de solução de problemas. A documentação oficial do systemd afirma que essa opção --forceignora systemctl rebooto desligamento normal do serviço, mas ainda encerra processos e tenta desmontar ou remontar sistemas de arquivos em modo somente leitura. Fornecer essa opção --forceduas vezes é mais perigoso, pois pode causar uma reinicialização sem encerrar processos ou desmontar sistemas de arquivos, com risco de perda de dados.

Se o servidor já estiver travado e não houver uma maneira mais segura de restabelecer o serviço, uma reinicialização forçada pode ser justificada de acordo com seus procedimentos operacionais:

sudo systemctl reboot --force

Evite tratar systemctl reboot --force --forceum ciclo de energia virtual ou uma reinicialização física como uma solução normal. Essas ações podem remover as evidências necessárias e colocar em risco as gravações em andamento. A documentação do systemctl distingue explicitamente os comportamentos de força simples e dupla.

E se cada reinicialização travar e você não conseguir solucionar o problema no modo normal?

Use um console de manutenção e inicialize no modo de recuperação. A SUSE documenta a adição de systemd.unit=rescue.targetcomandos à linha de comando do kernel a partir do editor GRUB. O modo de recuperação fornece uma sessão root com acesso aos sistemas de arquivos locais e serviços essenciais, mantendo a rede inativa, o que pode ajudar a desativar ou reparar o serviço ou a configuração de montagem com problemas.

Consulte o Guia de Administração do SLES 15 SP7 para obter o procedimento oficial do modo de recuperação. Em sistemas onde o problema aparece somente após uma alteração específica em um pacote, kernel, driver ou armazenamento, revise também o histórico de manutenção relevante do SUSE antes de fazer alterações permanentes no tempo limite.

Tabela de decisão rápida

O que você vêÁrea provável para inspeçãoMelhor próxima ação
A stop job is running for xyz.servicecaminho de desligamento do serviçoVerifique systemctl statuso arquivo da unidade e o diário de serviço.
Mensagens repetidas de desmontagem ou de sistema de arquivos remotoMontagem, NFS, CIFS, armazenamentoVerifique findmnt, monte as unidades /etc/fstabe a acessibilidade do servidor.
A solicitação de reinicialização foi recusada ou atrasada antes do desligamento.Inibidor ou outro trabalho do sistemaCorra systemd-inhibit --listesystemctl list-jobs
Os serviços são interrompidos, mas o desligamento final nunca é concluído.Gancho de desligamento tardio, kernel, driver, armazenamentoAnalise o diário de inicialização anterior e/usr/lib/systemd/system-shutdown/
A inicialização normal torna o reparo impossívelFalha persistente na configuração ou na unidadeInicializar comsystemd.unit=rescue.target

Resumindo

Para um servidor SUSE Linux travado durante o desligamento do systemd, a solução definitiva é identificar a tarefa que o systemd está aguardando e corrigir essa unidade ou sua dependência. Registre a mensagem de desligamento, inspecione o arquivo de configuração journalctl -b -1, use as opções `--systemd-timeout` systemctl list-jobse `--systemd-timeout` systemctl statuspara isolar o bloqueador e, somente então, altere o tempo limite de cada serviço ou a configuração de montagem. Reserve os métodos de reinicialização forçada para situações de recuperação, não para operações de rotina.

Deixar um comentário

Como recuperar partições perdidas e dados do disco rígido com segurança

Como recuperar partições perdidas e dados do disco rígido com segurança

Aprenda como recuperar partições e arquivos perdidos com o TestDisk e o PhotoRec. Proteja a unidade de origem, faça a verificação com segurança e salve os dados recuperados em outro disco.

Como ler códigos QR em um computador Linux

Como ler códigos QR em um computador Linux

Escaneie códigos QR no Linux com o CoBang usando uma webcam ou um arquivo de imagem. Veja as opções de instalação, etapas de configuração e correções para acesso à câmera via Flatpak.

Como alterar as configurações da webcam no Linux com o Cameractrls

Como alterar as configurações da webcam no Linux com o Cameractrls

Altere as configurações da webcam no Linux com o Cameractrls: ajuste a exposição, a cor, a redução de cintilação e outros controles compatíveis e, em seguida, verifique os modos de vídeo compatíveis.

Como instalar o PhpStorm no Linux: Toolbox, Tar.gz, Snap e AUR

Como instalar o PhpStorm no Linux: Toolbox, Tar.gz, Snap e AUR

Instale o PhpStorm no Linux com o JetBrains Toolbox ou o arquivo tar.gz independente, além das opções Snap e Arch AUR. O Java já está incluído.

Como configurar dois painéis no XFCE 4

Como configurar dois painéis no XFCE 4

Crie um painel XFCE 4 separado para cada tela, atribua o segundo painel à saída correta, posicione-o e dimensione-o e adicione os atalhos e itens de status necessários.

Como instalar o Cisco Packet Tracer no Linux

Como instalar o Cisco Packet Tracer no Linux

Baixe o Cisco Packet Tracer 9.0.1 para Ubuntu 64 bits, instale o pacote DEB com o APT, aceite a licença no Terminal e faça login para iniciar um laboratório.

Como recortar uma imagem no Linux com o GIMP

Como recortar uma imagem no Linux com o GIMP

Remova o fundo de uma foto no Linux com o GIMP: trace o contorno do objeto, exclua o fundo selecionado, mantenha a transparência e exporte um PNG reutilizável.

Como fazer backup de um CD-ROM como um arquivo ISO no Linux

Como fazer backup de um CD-ROM como um arquivo ISO no Linux

Crie uma imagem ISO de CD-ROM no Linux com o GNOME Disks ou o comando dd. Identifique a unidade óptica, monitore a cópia, verifique a imagem e saiba quando um disco danificado ou de áudio precisa de outra ferramenta.

Baixe o FlightGear gratuitamente: Guia de Instalação Oficial

Baixe o FlightGear gratuitamente: Guia de Instalação Oficial

Baixe o FlightGear gratuitamente no site oficial. Compare os pacotes para Windows, macOS e Linux, instale os arquivos de dados e inicie seu primeiro voo.

Aplicativo Google Tasks para desktop: como usá-lo no computador

Aplicativo Google Tasks para desktop: como usá-lo no computador

Abra o Google Tasks em um navegador, adicione um atalho do Chrome ou inicie o aplicativo automaticamente e gerencie suas tarefas agendadas pelo Agenda e pelo Gmail.