Linux systemctl: Verificar e Gerenciar Serviços

systemctl é um comando para verificar o status de serviços e outras unidades gerenciadas pelo systemd, iniciá-los ou pará-los, e definir se eles estão habilitados na inicialização. O status atual em execução e o status habilitado na inicialização são diferentes, então cada um deve ser verificado separadamente.

Antes de começar

systemd é o gerenciador de sistemas e serviços para Linux, e as unidades que ele gerencia incluem não apenas serviços (.service), mas também timers e sockets. Este artigo explica como gerenciar serviços do sistema no Linux usando systemd. Ele não pode ser usado como está em ambientes com outros sistemas de inicialização ou onde o systemd não está em execução. Para comandos detalhados, consulte o manual oficial do systemctl.

O seguinte apache2.service é um exemplo quando o Apache está instalado no Ubuntu. Se não estiver instalado, a unidade não pode ser encontrada, e o nome pode variar dependendo da distribuição. Antes de praticar, verifique o nome real do serviço, e como parar um servidor web ou serviço de acesso remoto em operação pode desconectar sua conexão, use um ambiente de teste seguro. Verificar o status muitas vezes é possível como usuário comum, mas alterar serviços do sistema geralmente requer privilégios de administrador.

Verificando o status e o nome do serviço

Verifique separadamente os serviços atualmente carregados e os arquivos de unidade de serviço instalados. As duas listas têm critérios diferentes, então os resultados podem não ser os mesmos.

systemctl list-units --type=service --all
systemctl list-unit-files --type=service

O primeiro mostra os serviços carregados no systemd, incluindo unidades inativas. O segundo mostra os arquivos de unidade de serviço instalados e seu status de habilitação, o que também é útil para encontrar serviços que ainda não foram carregados. Se a lista for longa e o pager abrir, pressione q para sair.

Por exemplo, para verificar o status e os logs recentes do serviço Apache, digite o seguinte.

systemctl status apache2.service
systemctl is-active apache2.service
systemctl is-enabled apache2.service

Na saída status, Active: active (running) significa que o serviço está atualmente em execução, inactive significa inativo e failed significa falhou. Os estados detalhados variam dependendo do tipo de serviço. is-active verifica o status atual, e is-enabled verifica o status de habilitação. As unidades static não podem ser habilitadas da maneira usual, mas podem ser iniciadas por outras unidades.

Início, parada e reinício do serviço

Os seguintes comandos realmente alteram o estado do serviço. Substitua o nome do serviço de exemplo pelo que for adequado ao seu sistema e certifique-se de que parar o serviço é aceitável antes de executar.

sudo systemctl start apache2.service
sudo systemctl stop apache2.service
sudo systemctl restart apache2.service

start inicia o serviço e stop o para. restart para o serviço e depois o reinicia, e ele pode iniciar um serviço parado. Execute apenas o comando necessário. Após cada operação, verifique o resultado com systemctl status apache2.service. Mesmo para serviços já em execução, as conexões podem ser temporariamente interrompidas durante um reinício.

Se o serviço suporta recarregar suas próprias configurações, você pode reaplicar as configurações com sudo systemctl reload apache2.service. O suporte e o método de aplicação variam para cada serviço. Recarregar e reiniciar não são a mesma ação, e como verificar as configurações deve seguir a documentação do serviço.

Ativação na Inicialização e Status Atual de Execução

Os seguintes comandos configuram ou removem a conexão para que as unidades sejam iniciadas durante o processo de inicialização, etc. Executar apenas enable não inicia nada imediatamente, e executar apenas disable não interrompe imediatamente os serviços que já estão em execução.

sudo systemctl enable apache2.service
sudo systemctl disable apache2.service
systemctl is-enabled apache2.service

Selecione e execute apenas os comandos necessários e verifique os resultados com o último comando. enabled indica habilitado e disabled indica desabilitado. No entanto, os serviços ainda podem iniciar devido a dependências de outras unidades ou sockets/timers, portanto, não interprete disable como bloqueio de todos os caminhos de inicialização.

Para ativar e iniciar imediatamente, use sudo systemctl enable --now apache2.service; para desativar e parar imediatamente, use sudo systemctl disable --now apache2.service. Verifique os efeitos de cada comando e pratique apenas em um ambiente de teste.

O que Verificar Quando Ocorrerem Problemas

Verifique a lista de unidades falhas e os logs recentes de serviços específicos. Os logs podem conter informações sensíveis, então revise o conteúdo antes de compartilhar.

systemctl --failed
sudo journalctl -u apache2.service -n 50 --no-pager

Se o serviço não puder ser encontrado, verifique seu nome e se ele está instalado. Se a inicialização falhar, verifique status e os logs para erros de configuração, serviços dependentes, conflitos de porta ou problemas de permissão. O status masked indica que a inicialização está bloqueada, portanto, não a libere arbitrariamente antes de identificar a causa. As mensagens e soluções podem variar dependendo da distribuição e das configurações do serviço.

Se você tiver alterado o arquivo da unidade

Se você modificou o arquivo de unidade do systemd ou a configuração de drop-in, use o seguinte comando para fazer o systemd reler as definições da unidade.

sudo systemctl daemon-reload

Este comando não reinicia o próprio serviço nem faz o serviço recarregar seus arquivos de configuração. Se você precisar aplicar as alterações em um serviço em execução, pode ser necessário um reinício ou recarregamento separado, adequado ao serviço e às alterações. Faça backup da configuração antes de fazer alterações e certifique-se de saber como reverter para o estado original.