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 comandoshow.-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, emenableou 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 comandostatus.-o, --output=: Define o formato da saída de log (consultejournalctl).--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 comandokill.
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 gerenciadorsystemde todos os arquivos de unidade.daemon-reexec: Reexecuta o processo do gerenciadorsystemd.
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 usandokexec.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 gerenciadorsystemd..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, substituindocron.
Diretórios de Configuração
/etc/systemd/system: Configurações do administrador do sistema./run/systemd/system: Arquivos gerados em tempo de execução./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 aRequires, mas com um vínculo mais forte; se uma unidade listada parar ou reiniciar, esta também o fará.PartOf: Similar aBindsTo, 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)targetesta unidade deve ser habilitada.RequiredBy: Define para qual(is)targetesta 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: Seyes, 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 deExecStart.ExecStartPost: Comandos a serem executados apósExecStart.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