Pular para o conteúdo

Estes 12 comandos systemctl permitirão que você assuma o controle dos serviços systemd do Linux

Tempo de leitura: 5 minutos

O comando systemctl possui algumas funcionalidades frequentemente esquecidas. Além de iniciar e parar os serviços do Linux, você pode listar os serviços instalados e verificar em que estado eles estão.

Qual é o comando systemctl?

O comando systemctl é a ferramenta de gerenciamento central do sistema init systemd, provavelmente mais conhecida como a ferramenta usada para iniciar e parar serviços. Mas há mais do que isso, como evidenciado por sua página de manual ter mais de 1.600 linhas.

Como o systemctl é uma ferramenta de gerenciamento, não apenas um iniciador de serviço, você pode usá-lo para acessar informações úteis sobre o sistema e os serviços do systemd.

A maioria das distribuições Linux adotou o systemd, mas algumas optaram por manter o tradicional sistema de inicialização SystemV. Se você não tiver certeza de qual esquema sua distribuição usa, é simples descobrir. Usaremos o comando stat para examinar o arquivo init.

stat /sbin/init 
Usando o comando stat para ver se uma instalação do Linux usa SystemV ou systemd.

O arquivo executável /sbin/init é o primeiro processo iniciado em distribuições baseadas em SystemV. Nas distribuições baseadas em systemd, um link simbólico com esse nome aponta para o arquivo systemd.

A primeira linha da saída nos mostra que nesta máquina de teste Ubuntu, /sbin/init é um link simbólico para o arquivo /lib/systemd/systemd. Claramente, esta instalação do Linux usa systemd. Se esta fosse uma distribuição baseada em SystemV, a linha conteria apenas “File: /sbin/init”.

Interrogando serviços com systemctl

Os serviços são definidos em arquivos unitários, e você verá a palavra unit espalhada pelas opções do systemctl. Por exemplo, podemos obter uma lista de serviços com o comando list-units com a opção –type.

systemctl list-units --type=service
A saída do comando systemctl list-units, mostrando serviços em execução e encerrados.

A saída é mostrada no visualizador de menos arquivos, permitindo rolar pela saída e usar a tecla / para pesquisar.

  • Unidade : O nome do arquivo da unidade.
  • Carregar : se o arquivo da unidade do serviço tiver sido lido na memória sem erros de sintaxe, esta coluna conterá “carregado”. Isso não significa que o serviço esteja ativo.
  • Ativo : uma visão de alto nível sobre se um serviço está ativo. Um serviço ativo pode não estar em execução.
  • Sub : uma visão mais granular sobre se um serviço está em execução. Por exemplo, um serviço ativo pode ser cronometrado para um temporizador e pode ter saído da sua última execução.
  • Descrição : uma linha de texto destinada a identificar ou descrever o serviço.

A exibição inclui apenas serviços ativos. Para ver todos os serviços, precisamos incluir a opção –all.

systemctl list-units --all --type=service
A saída do comando systemctl list-units, mostrando todos os serviços.

Se ver tudo for muito parecido com sobrecarga de informações, podemos filtrar a saída com a opção –state.

systemctl list-units --type=service --state=running
A saída do comando systemctl list-units filtrada para mostrar apenas serviços em execução.

A opção de estado aceitará execução, parada, habilitada, desabilitada e com falha.

Para focar em serviços com falha, use a opção –failed.

systemctl list-units --failed
A saída do comando systemctl list-units filtrada para mostrar apenas serviços com falha. Não há serviços com falha na saída.

Não há unidades com falha neste computador.

Se você vir algum serviço com falha, use a opção list-dependencies para verificar se há dependências não atendidas.

systemctl list-dependencies sshd.service
A saída do comando systemctl list-dependencies mostrando as dependências do serviço sshd.

As dependências possuem um círculo codificado por cores que representa seu estado. Pode ser:

  • Círculo Branco : Inativo ou em manutenção
  • Ponto Verde : Ativo.
  • Ponto Branco : Desativando.
  • Ponto Vermelho : Falha ou erro.

Para verificar se um único serviço está habilitado, use o comando is-enabled e forneça o nome do arquivo de unidade do serviço.

systemctl is-enabled htg-example.service
Usar o systemctl is-enabled para determinar se um serviço específico está habilitado.

Controlando serviços com systemctl

Usar o systemctl para gerenciar serviços é muito simples e segue o formato dos comandos que vimos até agora. A maior diferença é que você precisará usar o sudo para fazer alterações nos estados dos serviços. Não tivemos que usá-lo até agora, porque reportamos apenas os estados do serviço.

Para iniciar um serviço, use o comando start seguido do nome do serviço.

sudo systemctl start htg-example.service
Iniciando um serviço com o comando systemctl start.

Se tudo correr bem, você retornará silenciosamente ao prompt de comando. Se preferir uma confirmação positiva, você pode obter a verificação no comando de status.

sudo systemctl status htg-example.service
Verificando o status de um serviço com o comando systemctl status.

Interromper um serviço é tão simples quanto iniciá-lo.

sudo systemctl stop htg-example.service
Parando um serviço com o comando systemctl stop.

Você pode reiniciar um serviço sem precisar passar pelo processo de duas etapas de interrompê-lo manualmente e iniciá-lo. O comando restart faz tudo para você.

sudo systemctl restart htg-example.service
Reiniciando um serviço com o comando systemctl restart.

Se quiser que um serviço seja iniciado no momento da inicialização, você precisa habilitá-lo.

sudo systemctl enable htg-example.service
Habilitando um serviço com o comando systemctl enable.

Observe que isso apenas sinaliza o serviço para que ele seja iniciado no momento da inicialização, mas não imediatamente. Se é isso que você deseja, adicione o sinalizador –now.

sudo systemctl enable --now htg-example.service
Habilitar e iniciar um serviço ao mesmo tempo com o comando systemctl enable --now.

Quando você não precisar mais de um serviço para iniciar na inicialização, desative-o.

sudo systemctl disable htg-example.service
Desativando um serviço com o comando systemctl disable.

Você pode usar o comando journalctl, outra parte do systemd, para procurar entradas relacionadas ao seu serviço relacionado no arquivo . A opção -u (unidade) permite especificar o serviço no qual você está interessado. Com a opção -S (desde), você pode mostrar entradas que aconteceram desde o momento em que você forneceu.

journalctl -S "08:00:00" -u htg-example.service
Usando o comando journalctl para mostrar entradas de log do sistema relacionadas a um serviço específico.

Qualquer coisa que ajude você a obter insights sobre o funcionamento interno de sua distribuição Linux será uma ferramenta útil para gerenciamento diário e para solucionar e diagnosticar problemas. O comando systemctl não é uma ferramenta única. É mais como uma caixa de ferramentas especializadas e vale a pena conhecê-la.