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
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 é 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
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 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
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
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
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
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
Interromper um serviço é tão simples quanto iniciá-lo.
sudo systemctl stop htg-example.service
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
Se quiser que um serviço seja iniciado no momento da inicialização, você precisa habilitá-lo.
sudo systemctl enable htg-example.service
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
Quando você não precisar mais de um serviço para iniciar na inicialização, desative-o.
sudo systemctl disable htg-example.service
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
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.