Gerenciamento de Sistemas com Systemctl no Linux

O Systemd é um conjunto de ferramentas de gerenciamento de sistema e serviços que visa substituir o tradicional init em distribuições Linux. O comando systemctl é a interface principal para interagir com o Systemd, permitindo gerenciar unidades (como serviços, sockets, dispositivos, etc.), o próprio gerenciador e o sistema.

Visão Geral do Systemd e Systemctl

Historicamente, o Linux utilizava o processo init para gerenciar o boot e os serviços. Este método apresentava desvantagens como o tempo de inicialização prolongado (devido ao início sequencial de serviços) e a complexidade dos scripts de inicialização. O Systemd foi desenvolvido para otimizar esses aspectos, oferecendo uma solução completa para o gerenciamento do sistema.

O nome Systemd sugere que ele "serve" como um "daemon" (demônio) para todo o sistema. Ele se torna o primeiro processo do sistema (PID 1), com todos os outros processos sendo seus descendentes. As vantagens do Systemd incluem sua robustez e facilidade de uso, embora sua complexidade e forte acoplamento com outras partes do sistema sejam pontos de crítica para alguns.

Sintaxe do Comando Systemctl

systemctl [OPÇÕES...] {COMANDO} ...

Opções Comuns

  • -t, --type=: Filtra a listagem por tipos de unidade (ex: service, socket).
  • --state=: Filtra a listagem por estados de carregamento ou atividade da unidade.
  • -p, --property=: Exibe apenas atributos específicos ao usar o comando show.
  • -a, --all: Exibe todas as unidades carregadas, incluindo as inativas.
  • -r, --recursive: Inclui unidades de contêineres locais na listagem.
  • --reverse: Mostra dependências inversas entre unidades.
  • --after: Lista unidades que são ordenadas antes de uma unidade especificada.
  • --before: Lista unidades que são ordenadas após uma unidade especificada.
  • -l, --full: Não trunca a saída (nomes de unidades, descrições, etc.).
  • --job-mode=: Controla como os novos jobs são enfileirados (ex: fail, replace, isolate).
  • -i, --ignore-inhibitors: Ignora bloqueios que impedem o desligamento ou a suspensão do sistema.
  • -q, --quiet: Suprime a saída padrão para certos comandos.
  • --no-block: Não espera a conclusão da operação solicitada.
  • --no-legend: Não exibe o cabeçalho com a legenda das colunas.
  • --user: Interage com o gerenciador de serviços do usuário em vez do sistema.
  • --system: Interage com o gerenciador de serviços do sistema (padrão).
  • --failed: Lista apenas as unidades que falharam.
  • --force: Força a operação, por exemplo, em enable ou comandos de desligamento.
  • --runtime: Aplica alterações apenas temporariamente, perdendo-as após a reinicialização.
  • -n, --lines=: Define o número de linhas de log a serem exibidas com o comando status.
  • -o, --output=: Define o formato da saída de log (consulte journalctl).
  • --show-types: Exibe o tipo de sockets quando listados.
  • --kill-who=: Especifica qual processo de uma unidade deve ser sinalizado (main, control, all).
  • -s, --signal=: Especifica o sinal a ser enviado com o comando kill.

Comandos de Unidade

  • list-units [PADRÃO...]: Lista as unidades conhecidas.
  • list-sockets [PADRÃO...]: Lista as unidades de socket.
  • list-timers [PADRÃO...]: Lista as unidades de timer.
  • start UNIDADE...: Inicia uma ou mais unidades.
  • stop UNIDADE...: Para uma ou mais unidades.
  • reload UNIDADE...: Recarrega a configuração de uma ou mais unidades (sem reiniciar).
  • restart UNIDADE...: Reinicia uma ou mais unidades.
  • try-restart UNIDADE...: Reinicia uma unidade apenas se ela estiver em execução.
  • reload-or-restart UNIDADE...: Tenta recarregar; se não for possível, reinicia.
  • reload-or-try-restart UNIDADE...: Tenta recarregar; se não for possível, tenta reiniciar.
  • isolate NOME: Inicia uma unidade e para todas as outras.
  • kill UNIDADE...: Envia um sinal para os processos de uma unidade.
  • is-active UNIDADE...: Verifica se uma unidade está ativa. Retorna 0 se sim, não-zero se não.
  • is-failed UNIDADE...: Verifica se uma unidade está em estado de falha. Retorna 0 se sim, não-zero se não.
  • status [UNIDADE...|PID...]: Exibe o status atual de unidades e informações recentes do log.
  • show [UNIDADE...|JOB...]: Exibe os atributos de unidades, jobs ou do gerenciador.
  • cat UNIDADE...: Exibe os arquivos de configuração de unidades.
  • set-property NOME ATRIBUICAO...: Define atributos de uma unidade em tempo de execução.
  • help UNIDADE...|PID...: Exibe a página de manual de uma unidade ou do processo associado.
  • reset-failed [UNIDADE...]: Reseta o estado de falha de unidades especificadas.
  • list-dependencies [NOME]: Lista as dependências de uma unidade.

Comandos de Arquivos de Unidade

  • list-unit-files [PADRÃO...]: Lista todos os arquivos de unidade instalados.
  • enable NOME...: Habilita uma ou mais unidades para inicialização automática.
  • disable NOME...: Desabilita uma ou mais unidades para inicialização automática.
  • is-enabled NOME...: Verifica se uma unidade está habilitada.
  • reenable NOME...: Reabilita uma unidade, aplicando as configurações padrão do arquivo de instalação.
  • preset NOME...: Restaura as unidades para o estado definido nos arquivos de preset.
  • preset-all: Restaura todas as unidades para o estado definido nos arquivos de preset.
  • mask NOME...: Mascara uma ou mais unidades, impedindo sua inicialização.
  • link ARQUIVO...: Cria links simbólicos para arquivos de unidade fora dos caminhos de busca padrão.
  • get-default: Obtém o alvo padrão (default.target).
  • set-default NOME: Define o alvo padrão.

Comandos de Gerenciador

  • daemon-reload: Recarrega a configuração do gerenciador systemd e todos os arquivos de unidade.
  • daemon-reexec: Reexecuta o processo do gerenciador systemd.

Comandos de Sistema

  • is-system-running: Veirfica se o sistema está totalmente em execução.
  • default: Entra no modo padrão (default.target).
  • rescue: Entra no modo de resgate (rescue.target).
  • emergency: Entra no modo de emergência (emergency.target).
  • halt: Desliga e para o sistema.
  • poweroff: Desliga o sistema.
  • reboot [arg]: Reinicia o sistema.
  • kexec: Reinicia o sistema usando kexec.
  • exit: Sai do gerenciador de serviços do usuário.
  • suspend: Suspende o sistema.
  • hibernate: Coloca o sistema em hibernação.
  • hybrid-sleep: Suspende e hiberna o sistema.
  • switch-root ROTA [INIT]: Transiciona para um novo sistema de arquivos raiz.

Estrutura de Arquivos de Unidade

Os arquivos de unidade definem como o Systemd gerencia diferentes tipos de recursos. Cada tipo é identificado por um sufixo:

  • .automount: Configuração de montagem automática de sistemas de arquivos.
  • .device: Representa um dispositivo do kernel.
  • .mount: Define um ponto de montagem de sistema de arquivos.
  • .path: Monitora alterações em caminhos e aciona outras unidades.
  • .scope: Agrupa processos; geralmente não criado manualmente.
  • .service: Define um serviço a ser executado.
  • .slice: Define um grupo de controle (cgroup); raramente usado diretamente.
  • .snapshot: Representa um estado salvo do gerenciador systemd.
  • .socket: Define um socket de rede ou IPC.
  • .swap: Define uma área de swap.
  • .target: Agrupa outras unidades logicamente, similar aos runlevels do SysV.
  • .timer: Define ações a serem executadas em horários específicos, substituindo cron.

Diretórios de Configuração

  1. /etc/systemd/system: Configurações do administrador do sistema.
  2. /run/systemd/system: Arquivos gerados em tempo de execução.
  3. /usr/lib/systemd/system: Arquivos de unidade fornecidos por pacotes de software.

Seções Comuns em Arquivos de Unidade (.service)

Seção [Unit]

  • Description: Uma breve descrição do serviço.
  • Documentation: URLs para a documentação do serviço.
  • Requires: Lista de unidades que devem ser iniciadas e que, se falharem, causarão a falha desta unidade.
  • Wants: Lista de unidades que devem ser iniciadas junto com esta, mas cuja falha não afeta esta unidade.
  • After: Define que esta unidade deve iniciar após as unidades listadas.
  • Before: Define que esta unidade deve iniciar antes das unidades listadas.
  • BindsTo: Similar a Requires, mas com um vínculo mais forte; se uma unidade listada parar ou reiniciar, esta também o fará.
  • PartOf: Similar a BindsTo, mas não inicia esta unidade se as unidades listadas iniciarem.
  • OnFailure: Lista de unidades a serem iniciadas se esta unidade falhar.
  • Conflicts: Lista de unidades que entram em conflito com esta.

Seção [Install]

Esta seção é usada pelo comando enable e disable.

  • WantedBy: Define para qual(is) target esta unidade deve ser habilitada.
  • RequiredBy: Define para qual(is) target esta unidade é um requisito forte.
  • Also: Lista de unidades que devem ser habilitadas/desabilitadas junto com esta.

Seção [Service]

Configurações específicas para serviços.

  • Type: Tipo de inicialização do serviço (ex: simple, forking, notify).
  • RemainAfterExit: Se yes, o serviço é considerado em execução mesmo após o processo principal ter saído.
  • ExecStart: O comando principal para iniciar o serviço.
  • ExecStartPre: Comandos a serem executados antes de ExecStart.
  • ExecStartPost: Comandos a serem executados após ExecStart.
  • TimeoutStartSec: Tempo limite para o início do serviço.
  • ExecStop: O comando para parar o serviço.
  • TimeoutStopSec: Tempo limite para parar o serviço.
  • Restart: Política de reinicialização (ex: no, on-failure, always).
  • RestartSec: Tempo a aguardar antes de tentar reiniciar um serviço.
  • ExecReload: Comando para recarregar a configuração do serviço.
  • Environment: Define variáveis de ambiente para o serviço.
  • EnvironmentFile: Carrega variáveis de ambiente de um arquivo.
  • Nice: Define a prioridade do processo do serviço.
  • WorkingDirectory: Define o diretório de trabalho do serviço.
  • User: Define o usuário sob o qual o serviço será executado.
  • Group: Define o grupo sob o qual o serviço será executado.
  • StartLimitIntervalSec: Define o intervalo de tempo para o limite de reinicialização.
  • StartLimitBurst: Define o número máximo de reinicializações permitidas dentro do intervalo.

Exemplos de Uso

Para iniciar um serviço chamado meu-servico.service:

sudo systemctl start meu-servico.service

Para parar o serviço:

sudo systemctl stop meu-servico.service

Para reiniciar o serviço:

sudo systemctl restart meu-servico.service

Para verificar o status do serviço:

sudo systemctl status meu-servico.service

Para habilitar o serviço a iniciar na inicialização do sistema:

sudo systemctl enable meu-servico.service

Para desabilitar o serviço da inicialização automática:

sudo systemctl disable meu-servico.service

Para verificar se um serviço está habilitado:

systemctl is-enabled meu-servico.service

Para recarregra a configuração do systemd após modificar arquivos de unidade:

sudo systemctl daemon-reload

Para listar todas as unidades:

systemctl list-units --all

Para reiniciar o sistema:

sudo systemctl reboot

Para desligar o sistema:

sudo systemctl poweroff

Para exibir as variáveis de ambiente do gerenciador systemd:

systemctl show-environment

Tags: systemd systemctl Linux gerenciamento de sistema serviços

Publicado em 7-4 18:05