Iniciar, parar e reiniciar o Apache: comandos e a diferença do graceful

Ambiente de testeFamília RHELAlmaLinux 9.8conta rootVerificado em 2026-10-29

Em um servidor Linux, você inicia, para e reinicia o Apache com o comando systemctl, e o nome do serviço é httpd na família RHEL e apache2 na família Debian. Depois de ler a saída do systemctl status, o arquivo de unidade do httpd e o script apachectl em um servidor AlmaLinux 9, vimos que o restart derruba o Apache e o sobe de novo, enquanto o graceful mantém o processo pai e só relê a configuração.

Como parar e reiniciar interrompem o serviço de verdade, não executamos start, stop nem restart no servidor de teste. Em vez disso, conferimos o comportamento com a documentação oficial do Apache, o manual do httpd.service e os registros de reload que estavam no servidor. O nome do host, o número da porta, os horários e a quantidade de requisições na saída abaixo são valores de exemplo.

1️⃣ Comandos para iniciar, parar e reiniciar o Apache

O nome do serviço do Apache muda conforme a família da distribuição. A família RHEL, como RHEL, AlmaLinux e Rocky Linux, o registra no systemd como httpd, e o Ubuntu e o Debian, como apache2.

TarefaFamília RHEL (httpd)Família Debian (apache2)
Iniciarsystemctl start httpdsystemctl start apache2
Pararsystemctl stop httpdsystemctl stop apache2
Reiniciarsystemctl restart httpdsystemctl restart apache2
Reler a configuração (graceful)systemctl reload httpdsystemctl reload apache2
Ver o statussystemctl status httpdsystemctl status apache2
Iniciar automaticamente no bootsystemctl enable httpdsystemctl enable apache2

Execute os comandos da tabela como root. Em uma conta comum, coloque sudo antes do comando.

Se você confundir as famílias e usar o outro nome, o comando não é executado. Ao consultar o status com apache2 em um servidor da família RHEL, apareceu um erro dizendo que a unidade não foi encontrada.

systemctl status apache2
Unit apache2.service could not be found.

O código de saída foi 4, e ao trocar o nome para httpd no mesmo servidor saiu a saída normal.

Na família RHEL, você inicia, para e reinicia o Apache com os três comandos abaixo.

systemctl start httpd

O start sobe um Apache que está parado. Para conferir se ele iniciou, use systemctl status.

systemctl stop httpd

O stop para o Apache. Até você iniciá-lo de novo, ele não aceita requisições web.

systemctl restart httpd

O restart executa stop e start em sequência. Se você só mudou arquivos de configuração, aplique com reload (graceful), que não derruba as conexões.

No AlmaLinux 9, o apachectl é um script de shell instalado no lugar do apachectl distribuído pelo Apache. Ao receber start, stop, restart e status, ele os repassa direto ao systemctl, então apachectl restart e systemctl restart httpd fazem a mesma coisa.

2️⃣ Ver o status do serviço Apache

Para saber se o Apache está rodando agora e quando ele iniciou, use systemctl status.

systemctl status httpd
● httpd.service - The Apache HTTP Server
     Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; preset: disabled)
     Active: active (running) since Sat 2026-10-17 08:30:49 UTC; 1 week 4 days ago
       Docs: man:httpd.service(8)
    Process: 2930107 ExecReload=/usr/sbin/httpd $OPTIONS -k graceful (code=exited, status=0/SUCCESS)
   Main PID: 741 (httpd)
     Status: "Total requests: 52418; Idle/Busy workers 75/0;Requests/sec: 0.0528; Bytes served/sec: 3.9KB/sec"
      Tasks: 224 (limit: 4615)
     Memory: 184.3M (peak: 593.8M)
        CPU: 47min 33.944s
     CGroup: /system.slice/httpd.service
             ├─    741 /usr/sbin/httpd -DFOREGROUND
             ├─2930111 /usr/sbin/httpd -DFOREGROUND
             ├─2930143 /usr/sbin/httpd -DFOREGROUND
             └─2930144 /usr/sbin/httpd -DFOREGROUND

Oct 28 15:00:00 server systemd[1]: Reloading The Apache HTTP Server...
Oct 28 15:00:00 server systemd[1]: Reloaded The Apache HTTP Server.
Oct 28 15:00:00 server httpd[741]: Server configured, listening on: port 80

active (running) na linha [Active] significa que ele está rodando agora, e o horário depois de since é quando ele iniciou. Este servidor iniciou 11 dias antes e nunca parou, e [Main PID] 741 era o processo pai que subiu naquele momento.

Em [CGroup], o que aparece abaixo de 741 são processos filhos que de fato atendem às requisições (veja Processos). A linha [Status] mostra o número de requisições atendidas até agora e quantos workers estão livres e quantos estão ocupados.

As três linhas de log no fim da saída eram registros de reload deixados uma vez por dia no mesmo horário: a ferramenta logrotate, que divide os logs por data, executou systemctl reload httpd depois de terminar a rotação, e o manual do httpd.service também diz que o httpd recebe reload depois do logrotate.

Em scripts e comandos de verificação, use is-active e is-enabled, que mostram uma só palavra.

systemctl is-active httpd
active

Com o serviço rodando, saiu active e o código de saída 0. Mesmo com apache2, que não existe no servidor, saiu inactive e o código de saída 3, igual a um serviço parado, então nos scripts confira primeiro se o nome do serviço está certo.

systemctl is-enabled httpd
enabled

enabled significa que o Apache está registrado para iniciar automaticamente no boot.

3️⃣ Diferença entre reiniciar o Apache e o graceful

O restart e o graceful (reload) tratam de forma diferente as requisições em andamento e o processo pai. Primeiro conferimos essa diferença nas linhas do arquivo de unidade do httpd usadas para reload e stop.

systemctl cat httpd | grep -E "Exec|Kill"
ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND
ExecReload=/usr/sbin/httpd $OPTIONS -k graceful
KillSignal=SIGWINCH
KillMode=mixed

A linha ExecReload significa que o reload executa httpd -k graceful, e a linha KillSignal significa que o sinal enviado no stop é SIGWINCH (graceful-stop).

Por isso o systemctl restart httpd para o Apache com graceful-stop e depois o inicia de novo. As requisições em andamento são concluídas antes de ele cair, mas o próprio processo pai sobe de novo, então o número do [Main PID] muda. Entre a parada e o início, a porta fica fechada e novas conexões não são aceitas. O arquivo de unidade apache2.service do pacote do Debian também executa apachectl graceful-stop ao parar.

O httpd -k restart envia um sinal HUP ao processo pai. Segundo a documentação oficial do Apache, o pai continua, mas os processos filhos são encerrados na hora, então as requisições em andamento são cortadas e as estatísticas de requisições voltam a 0.

O graceful envia um sinal USR1 ao processo pai. O pai relê os arquivos de configuração, e cada processo filho é trocado por um filho com a nova configuração assim que termina a requisição que estava atendendo. As conexões que chegam nesse meio-tempo ficam na espera do sistema operacional, então não se perdem.

É como uma loja que continua aberta enquanto cada caixa, ao terminar de atender o cliente, passa o posto para um colega da nova escala.

🔁 O que muda nas três formas de reiniciar o Apache
Diagrama explicativo
🔁 Comando
$ systemctl restart httpdhttpd -k restartsystemctl reload httpd
① Processo pai (Main PID)Cai e sobe de novoO número do Main PID muda.inalteradoRecebe o sinal HUP e relê os arquivos de configuração.inalteradoRecebe o sinal USR1 e relê os arquivos de configuração.
② Requisições em andamentoConcluídas, depois encerraA parada é graceful-stop (WINCH), então as requisições em andamento são concluídas.Cortadas na horaEncerra os processos filhos na hora e sobe filhos novos.Atendidas até o fimCada filho é trocado por um com a nova configuração ao terminar sua requisição.
③ Novas conexõesNão aceitas até subir de novoFecha a porta ao parar.Atendidas quando os filhos novos sobemMantém a porta aberta e as atende quando os filhos novos sobem.Não são cortadasMantém a porta aberta para que o sistema operacional deixe as conexões em espera.
O systemctl restart httpd para o Apache e depois o inicia de novo, então o próprio processo pai sobe de novo e, nesse intervalo, novas conexões não são aceitas.
O httpd -k restart envia um sinal HUP ao processo pai e encerra os processos filhos na hora, então as requisições em andamento são cortadas.
O systemctl reload httpd e o apachectl graceful deixam o processo pai como está e trocam os processos filhos na ordem em que suas requisições terminam.

Conferimos essa diferença pelo Main PID. Embora o reload rodasse todo dia, o Main PID 741 e o horário de Active continuavam os mesmos de 11 dias antes, e os números dos processos filhos (2930111 etc.) vinham logo depois do 2930107 da linha [Process] do último reload.

systemctl reload httpd, apachectl graceful e httpd -k graceful são todos o mesmo graceful. No AlmaLinux 9, o apachectl envia SIGUSR1 ao processo pai com systemctl kill quando recebe graceful, e o apachectl -k graceful, com -k na frente, tira o -k e faz a mesma coisa.

O graceful só relê a configuração, então não serve depois de atualizar o pacote httpd. Segundo o manual do httpd.service, o reload não é seguro se um módulo atualizado usa um recurso que só existe no novo httpd; por isso o pacote httpd reinicia o Apache automaticamente com systemctl try-restart quando é atualizado.

4️⃣ Verificar a sintaxe da configuração do Apache

Mesmo que você aplique as mudanças com graceful para não derrubar conexões, o Apache não passa para a nova configuração se um arquivo de configuração tiver um erro de digitação. Segundo a documentação oficial do Apache, restart e graceful fazem primeiro uma verificação de sintaxe e, se houver erro, só mostram a mensagem de erro e não reiniciam.

Por isso, depois de editar a configuração, verifique primeiro a sintaxe com apachectl -t.

apachectl -t
Syntax OK

Ao executar apachectl -t, saiu uma única linha Syntax OK, e com apachectl configtest o resultado foi o mesmo. O apachectl da família RHEL executa httpd -t do jeito que está quando recebe -t.

Ao verificar um arquivo de configuração de teste com um nome de diretiva escrito errado, em vez de Syntax OK saiu o erro AH00526 junto com o número da linha e a diretiva não reconhecida ([Invalid command 'DirectoryIndx']), e o código de saída foi 1. Corrija a linha indicada na mensagem de erro e verifique de novo.

systemctl reload httpd

Se a verificação passar, aplique a configuração com reload. Segundo a documentação oficial do Apache, a verificação de sintaxe só olha a sintaxe, então a aplicação pode falhar mesmo que ela passe. Depois do reload, confira mais uma vez a linha [Active] do systemctl status e os logs no fim.

🔲 Simulador de comandos do Apache

No servidor virtual do simulador abaixo, você mesmo pode digitar comandos systemctl, apachectl e httpd -k. Depois do reload, o Main PID continua o mesmo e só os números dos processos filhos mudam. Depois do restart, até o Main PID muda para um número novo.

Simulador de comandos do Apachehttpd da família RHEL
[root@server work]#
Use as teclas ↑↓ para chamar de volta os comandos digitados antes.

🔢 FAQ & conteúdo recomendado

Ao digitar apachectl fullstatus no AlmaLinux 9, saiu um erro dizendo que a opção fullstatus não é suportada (not supported), com o código de saída 2. O apachectl da família RHEL é um script instalado no lugar do apachectl distribuído pelo Apache, então só aceita start, stop, restart, status, graceful, graceful-stop, configtest, -t e -v.

Segundo o manual do httpd.service, a unidade httpd vem desativada (disabled) por padrão, e preset: disabled na linha [Loaded] do systemctl status é esse padrão. Se você executar systemctl enable httpd uma vez, ele inicia a cada boot, e se adicionar --now ao enable, ele também inicia na hora.

Segundo o manual do httpd.service, se você executar o httpd direto em um shell root, o serviço inicia fora do systemd e as restrições de segurança padrão, como o SELinux, não são aplicadas. Por isso, inicie e pare o serviço com systemctl ou apachectl, e use o comando httpd só para opções que não sobem o serviço, como a verificação de sintaxe -t.

ℹ️ Aviso de afiliados
O conteúdo deste site contém links de afiliados. Quando um visitante compra um produto ou serviço por meio de um desses links, o site recebe uma comissão do vendedor. O valor que o comprador paga (em promoções, ele diminui ↓) não aumenta por causa disso. Preços, descontos e informações de estoque valem para o momento em que o texto foi escrito e podem ter mudado, por isso confirme com o vendedor antes de comprar. Os produtos são escolhidos e avaliados por critérios próprios, e o recebimento de comissão não influencia a ordem de apresentação nem o conteúdo das avaliações.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Demonstre sua humanidade: 0   +   6   =