04 - Comando systemctl (start, stop, enable, status, mask)
video: https://youtu.be/... no frontmatter da nota.O utilitário systemctl é a interface de linha de comando (CLI) central e primária para a inspeção, manipulação e controle do gerenciador de sistema e serviços systemd. No modelo do systemd, o binário /usr/bin/systemctl não executa diretamente as alterações no estado dos processos; ele atua estritamente como um cliente IPC (Inter-Process Communication).
Quando um administrador executa um comando como systemctl start nginx, o utilitário serializa a requisição e a envia através do barramento do sistema (D-Bus) para a interface org.freedesktop.systemd1.Manager exposta pelo PID 1. É o processo daemon raiz que valida os privilégios (via Polkit), processa a alteração no Grafo Acíclico Dirigido (DAG) em memória e executa as chamadas de sistema no kernel.
Este arquivo detalha os verbos operacionais fundamentais (start, stop, enable, disable, status, mask, unmask e reload), a mecânica de transição de estado na RAM versus persistência em disco, a análise das tabelas de saída do status e os códigos de retorno IPC.
1. O Ciclo de Vida Transitório vs. Persistente
A arquitetura do systemd estabelece uma separação rígida entre a execução em tempo de execução (runtime state) e a configuração de inicialização em disco (boot configuration). Compreender a diferença entre alterar a memória e alterar o sistema de arquivos é o pilar para a administração do PID 1.
+----------------------------------+
| Comandos IPC |
| (systemctl start / stop) |
+----------------------------------+
│
▼
┌───────────────────────────────┐
│ Memória RAM (PID 1 - DAG) │
│ Objeto da Unidade no Cgroup │
└───────────────────────────────┘
▲
│
+----------------------------------+
| Links Simbólicos em Disco |
| (systemctl enable / disable) |
+----------------------------------+
- Estado Transitório (RAM): Manipulado por verbos como
start,stop,restartereload. Estas operações instruem o PID 1 a alterar imediatamente o estado da unidade na memória (criando cgroups, invocandoexecve(), ou enviando sinais de interrupção comoSIGTERM). Se o sistema for reiniciado, o estado na RAM é perdido. - Estado Persistente (Disco): Manipulado por verbos como
enable,disable,maskeunmask. Estas operações não afetam os processos em execução no momento presente. Elas modificam exclusivamente a presença de links simbólicos nos diretórios de alvo em/etc/systemd/system/*.wants/ou/etc/systemd/system/*.requires/, ditando se a unidade será puxada para a transação do DAG durante o próximo ciclo de boot.
2. Invocação e Parada do Ciclo de Vida: start, stop, restart, reload
Os verbos de controle de execução gerenciam as transições de estado do objeto da unidade na memória e a correspondente árvore de processos nos Control Groups (cgroups).
2.1. systemctl start <unidade>
Solicita ao PID 1 que mova a unidade do estado inactive para o estado activating e, subsequentemente, active.
- Mecânica Interna: O
systemdanalisa as dependências declaradas na unidade (Requires=,Wants=,After=). Ele enfileira um job na fila de transações. Se a unidade depender de outras unidades que ainda não estão ativas, o PID 1 resolverá e disparará as dependências primeiro. - Sincronismo: Por padrão, o
systemctl startbloqueia o terminal até que o PID 1 confirme a conclusão da transação da unidade (por exemplo, quando um serviçoType=notifyemite o sinalREADY=1via soquete Unix, ou quando um serviçoType=oneshotfinaliza com código de saída 0). - Flag
--no-block: Altera a chamada para assíncrona. O comando enfileira a requisição no D-Bus, retorna o controle ao shell imediatamente e permite que a inicialização ocorra em segundo plano.
2.2. systemctl stop <unidade>
Solicita a transição da unidade do estado active para deactivating e inactive.
- Mecânica Interna: O
systemdnão se baseia na leitura de arquivos PID armazenados no disco para localizar os processos a serem encerrados. Ele identifica o cgroup exclusivo atrelado à unidade (ex:/sys/fs/cgroup/system.slice/nginx.service/). - Se a unidade definir a diretiva
ExecStop=, esse comando é executado primeiro. Se não for definida, ou após a conclusão deExecStop=, o PID 1 envia o sinalSIGTERM(ou o sinal definido emKillSignal=) para todos os processos pertencentes àquele cgroup simultaneamente. - Temporizador de Extermínio (
TimeoutStopSec=): Osystemdinicia uma contagem regressiva (padrão de 90 segundos). Se algum processo no cgroup recusar-se a finalizar e permanecer ativo após o estouro do temporizador, o PID 1 envia um sinalSIGKILLdestrutivo e não interceptável para garantir a limpeza do cgroup.
2.3. systemctl restart <unidade>
Executa uma operação combinada e atômica de stop seguida de start.
- Se a unidade estiver inativa no momento da chamada, o
systemctl restartexecutará ostartnormalmente. - Durante o
restart, osystemdcancela qualquer temporizador de restauração pendente e reconstrói as estruturas do objeto em memória, relendo atualizações feitas em disco caso os arquivos de unidade tenham sofrido alterações (se acoplado a umdaemon-reload).
2.4. systemctl reload <unidade>
Solicita à aplicação que recarregue suas configurações em disco sem encerrar o processo nem perder descritores de arquivos abertos ou conexões de soquete ativas.
- Mecânica Interna: O
systemdlê a instrução definida na diretivaExecReload=do arquivo.service(ex:ExecReload=/bin/kill -HUP $MAINPIDou/usr/sbin/nginx -s reload). - Se a unidade não possuir a diretiva
ExecReload=declarada em seu arquivo de configuração, a requisição D-Bus falha e osystemctlretorna a mensagem de erro: Unit does not support reload.
3. Ancoragem e Persistência: enable, disable, is-enabled
Os verbos de habilitação manipulam a presença estrutural de links simbólicos no sistema de arquivos estático, determinando o comportamento do sistema durante a fase de montagem do DAG no boot.
3.1. systemctl enable <unidade>
Lê a seção [Install] do arquivo de unidade e cria os symlinks correspondentes nos diretórios de alvos (targets).
- Mecânica de Disco: Se o arquivo
/usr/lib/systemd/system/sshd.servicecontém:
[Install]
WantedBy=multi-user.target
Alias=sshd.service
Ao executar systemctl enable sshd.service, o systemctl imprime na saída padrão as operações de sistema de arquivos realizadas:
Created symlink /etc/systemd/system/multi-user.target.wants/sshd.service → /usr/lib/systemd/system/sshd.service.
* Combinação --now: Por padrão, enable não inicia o serviço imediatamente. Para habilitar a persistência no boot e iniciar o processo na RAM na mesma chamada, utiliza-se o atalho sintático:
systemctl enable --now sshd.service
3.2. systemctl disable <unidade>
Remove os links simbólicos associados à seção [Install] da unidade localizados em /etc/systemd/system/.
- Mecânica de Disco: Remove o symlink em
/etc/systemd/system/multi-user.target.wants/sshd.service. - Inércia de Runtime: Executar
systemctl disablenão para um serviço que esteja rodando na RAM. O processo continuará ativo até que umsystemctl stopseja executado ou a máquina seja desenergizada. - Combinação
--now: Desabilita a inicialização no boot e encerra a unidade na RAM simultaneamente:
systemctl disable --now sshd.service
3.3. systemctl is-enabled <unidade>
Interroga o sistema de arquivos e o estado da unidade, retornando uma string de status e um código de saída do shell ($?):
| Saída da CLI | Significado Arquitetural | Código de Saída ($?) |
|---|---|---|
enabled |
Symlink presente em /etc/systemd/system/*.wants/ ou .requires/. |
0 |
disabled |
Symlink ausente nos alvos, mas a seção [Install] existe. |
non-zero (1) |
static |
O arquivo de unidade não possui a seção [Install]. Não pode ser habilitado isoladamente; só é iniciado se requisitado por outra unidade. |
0 |
masked |
A unidade aponta para /dev/null. |
non-zero (1) |
indirect |
A unidade é habilitada exclusivamente por intermédio da diretiva Also= de outra unidade. |
0 |
generated |
A unidade foi gerada dinamicamente na RAM por um generator executado no boot (ex: de /etc/fstab). |
0 |
transient |
A unidade foi criada dinamicamente via API em tempo de execução (ex: systemd-run). |
0 |
4. Diagnóstico e Inspeção de Estado: status
O comando systemctl status <unidade> é a ferramenta de diagnóstico primária para inspecionar a árvore de processos, os metadados de execução, o estado no cgroup e os últimos eventos do journald atrelados a uma unidade.
Anatômica Analítica da Saída do systemctl status
Considere a saída típica do comando systemctl status nginx.service:
● nginx.service - The NGINX HTTP and reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2026-10-14 14:20:00 -03; 1h 32min ago
Main PID: 2450 (nginx)
Tasks: 3 (limit: 4915)
Memory: 12.4M (max: 512.0M limit: 1.0G)
CPU: 1.120s
CGroup: /system.slice/nginx.service
├─2450 "nginx: master process /usr/sbin/nginx -g daemon off;"
├─2451 "nginx: worker process"
└─2452 "nginx: worker process"
Oct 14 14:20:00 server01 systemd[1]: Starting The NGINX HTTP and reverse proxy server...
Oct 14 14:20:00 server01 systemd[1]: Started The NGINX HTTP and reverse proxy server.
Dissecação dos Campos de Diagnóstico:
- Linha de Cabeçalho (
●): O símbolo indica a saúde visual da unidade. O ponto branco/verde indica operação normal; um ponto vermelho (●) indica que a unidade está no estadofailed. -
Loaded::
*loaded: O arquivo de unidade foi parseado e carregado na memória do PID 1.
*/usr/lib/systemd/system/nginx.service: O caminho absoluto de onde o arquivo foi lido.
*enabled: O estado de habilitação em disco.
*vendor preset: enabled: A política padrão definida pelos empacotadores da distribuição. -
Active:: Exibe o estado da máquina de estados primária e sub-estado de runtime.
*active (running): O processo principal está rodando e saudável.
*active (exited): Típico de unidadesType=oneshot. O processo finalizou com sucesso (código 0) e a flagRemainAfterExit=yesmantém o estado como ativo.
*failed (Result: exit-code): O processo crashou ou retornou código de erro não tratado.
*since ...: O carimbo de data/hora relativo e absoluto do momento exato da última transição de estado. -
Main PID:: O Identificador de Processo (PID) do processo pai no espaço do kernel e o nome do binário. Tasks:: O número atual de threads e processos filhos alocados no cgroup, seguido pelo limite estipulado (TasksMax=).Memory:: O consumo de memória RAM física (RES) em tempo real, acompanhado pelas cotas de controle de recursos configuradas na unidade (MemoryMax=,MemoryHigh=).CPU:: O tempo total de CPU (user + system) consumido por todos os processos daquela unidade desde a sua inicialização.CGroup:: A hierarquia completa do Control Group (cgroup v2). Lista todos os PIDs pertencentes àquela unidade, provando a incapacidade de subprocessos "escaparem" do rastreamento dosystemd.- Roda de Logs (Journal Tail): Os últimos 10 registros de log coletados pelo
systemd-journaldfiltrados estritamente para essa unidade (_SYSTEMD_UNIT=nginx.service).
5. Aniquilação Estrutural e Bloqueio: mask e unmask
Em sistemas complexos, simplesmente desabilitar uma unidade (systemctl disable) não impede que ela seja iniciada. Se a Unidade A estiver desabilitada, mas a Unidade B (que possui Requires=A ou Wants=A) for iniciada, o systemd tentará localizar o arquivo da Unidade A em disco e a disparará para satisfazer a dependência de B.
Para impor a neutralização absoluta de uma unidade, utiliza-se o mecanismo de Mascaramento (Masking).
/etc/systemd/system/servico.service
│
▼ (Link Simbólico)
/dev/null
│
▼
[Tentativa de Carga pelo Parser do PID 1]
│
▼
Retorno EOF -> Estado: "masked" (Falha Transacional)
5.1. systemctl mask <unidade>
Impede a execução da unidade sob qualquer circunstância (manual ou via dependência).
- Mecânica do Sistema de Arquivos: O
systemctlcria um link simbólico no diretório de mais alta prioridade do caminho de carga (/etc/systemd/system/) apontando diretamente para o dispositivo nulo do kernel (/dev/null):
# Operação executada pelo mask:
ln -s /dev/null /etc/systemd/system/nginx.service
- Resultado Operacional: Quando o PID 1 tenta ler a unidade (seja por requisição manual
systemctl start, ativação por soquete, ou por dependênciaRequires=), o parser encontra o arquivo vazio em/dev/null. A carga aborta imediatamente com a mensagem:
Failed to start nginx.service: Unit nginx.service is masked.
5.2. systemctl unmask <unidade>
Remove o symlink que aponta para /dev/null em /etc/systemd/system/, restaurando a visibilidade do arquivo de unidade original mantido pelo fornecedor em /usr/lib/systemd/system/.
- Mecânica de Disco:
# Operação executada pelo unmask:
rm /etc/systemd/system/nginx.service
- Após o
unmask, a unidade retorna ao seu estado prévio de habilitação (enabledoudisabled).
6. Recarga da Máquina de Estados e daemon-reload
Quando um administrador de sistemas cria um novo arquivo .service ou edita um arquivo existente em /etc/systemd/system/ (ou adiciona um arquivo drop-in em um diretório .service.d/), o systemd não detecta as alterações no disco automaticamente em tempo real.
O PID 1 mantém o grafo do sistema e todas as definições de unidades compiladas dentro da sua memória RAM.
01. systemctl daemon-reload
Instrui o PID 1 a re-varrer exaustivamente todo o caminho de carga de unidades (Unit Load Path):
/etc/systemd/system//run/systemd/system//usr/lib/systemd/system/
O daemon-reload recompila os arquivos INI alterados em disco, atualiza os objetos na memória RAM, invalida caches obsoletos e reconstrói as arestas do Grafo Acíclico Dirigido (DAG).
- Se um arquivo de unidade em disco for alterado e o administrador tentar executar
systemctl startourestartsem antes executar a recarga, osystemctlemitirá o aviso de alerta:
Warning: The unit file, source configuration file or drop-ins of nginx.service changed on disk. Run 'systemctl daemon-reload' to reload units.
7. Matriz Operacional de Subcomandos do systemctl
A tabela abaixo resume a taxonomia de comandos do systemctl, destacando o domínio de alteração (RAM vs. Disco) e o efeito sistêmico correspondente:
| Subcomando | Domínio primário | Altera estado na RAM imediato? | Altera persistência no Boot? | Efeito na Estrutura do Sistema de Arquivos |
|---|---|---|---|---|
start |
Memória RAM | Sim | Não | Nenhum. Executa a transação no DAG e cria cgroups. |
stop |
Memória RAM | Sim | Não | Nenhum. Envia sinais de terminação ao cgroup. |
restart |
Memória RAM | Sim | Não | Nenhum. Recria o cgroup e reinicia o processo. |
reload |
Memória RAM | Sim | Não | Nenhum. Envia sinal de recarga de config ao processo. |
enable |
Disco | Não | Sim | Cria symlink em /etc/systemd/system/*.wants/. |
disable |
Disco | Não | Sim | Remove symlink em /etc/systemd/system/*.wants/. |
enable --now |
RAM + Disco | Sim | Sim | Cria symlink e inicia o processo na memória. |
disable --now |
RAM + Disco | Sim | Sim | Remove symlink e encerra o processo na memória. |
mask |
Disco | Não | Sim | Cria symlink apontando a unidade para /dev/null. |
unmask |
Disco | Não | Sim | Deleta o symlink que apontava para /dev/null. |
status |
Consulta (RAM) | Não | Não | Leitura de telemetria no D-Bus e no Journald. |
daemon-reload |
Memória RAM | Sim | Não | Re-escaneia diretórios e atualiza o DAG na RAM. |