<!-- review: finished -->

<a id="runtime"></a>

# Controle em Tempo de Execução

Para iniciar o Angie, use o **systemd** com o seguinte comando:

```console
$ sudo service angie start
```

É recomendado verificar a sintaxe da configuração antecipadamente. Veja como:

```console
$ sudo angie -t && sudo service angie start
```

Para recarregar a configuração:

```console
$ sudo angie -t && sudo service angie reload
```

Para parar o Angie:

```console
$ sudo service angie stop
```

Após a instalação, execute o seguinte comando para garantir que o Angie esteja
funcionando:

```console
$ curl localhost:80
```

#### NOTE
Os métodos para executar a versão de código aberto do Angie podem variar
dependendo do método de instalação.

O Angie possui um processo mestre e vários processos trabalhadores. O processo
mestre é responsável por ler e avaliar a configuração e manter os processos
trabalhadores. Os processos trabalhadores lidam com o processamento real das
requisições. O Angie usa um modelo baseado em eventos e mecanismos dependentes
do SO para distribuir eficientemente as requisições entre os processos
trabalhadores. O número de processos trabalhadores é definido no arquivo de
configuração e pode ser fixo para uma determinada configuração ou ajustado
automaticamente com base no número de núcleos de CPU disponíveis (veja
[worker_processes](https://pt.angie.software//angie/docs/configuration/modules/core.md#worker-processes)).

Quando configurado, o Angie também descarregará certas zonas de memória
compartilhada (atualmente, a `keys_zone` em [proxy_cache_path](https://pt.angie.software//angie/docs/configuration/modules/http/http_proxy.md#proxy-cache-path))
para o disco antes de sair,
para que o novo processo mestre possa restaurá-las
e assim melhorar o desempenho.
Se a restauração falhar devido a uma mudança no tamanho da zona,
incompatibilidade de versão binária ou outras razões,
o Angie registrará um alerta (`failed to restore zone at address`)
e não usará o mecanismo de restauração de zona.

<a id="control-signals"></a>

## Usando Sinais

O Angie também pode ser controlado usando sinais. Por padrão, o ID do processo
do processo mestre é escrito no arquivo `/run/angie.pid`. Este nome de
arquivo pode ser alterado no momento da configuração ou em `angie.conf`
usando a diretiva [pid](https://pt.angie.software//angie/docs/configuration/modules/core.md#pid). O processo mestre suporta os seguintes sinais:

| `TERM`, `INT`   | Desligamento rápido                                                                                                                                                                                                                                                                                                      |
|-----------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `QUIT`          | Desligamento [gracioso](https://pt.angie.software//angie/docs/configuration/modules/core.md#worker-shutdown-timeout)                                                                                                                                                                                                     |
| `HUP`           | Recarregar configuração, atualizar fuso horário (apenas para FreeBSD e Linux),<br/>iniciar novos processos trabalhadores com a configuração atualizada,<br/>desligar [graciosamente](https://pt.angie.software//angie/docs/configuration/modules/core.md#worker-shutdown-timeout) os processos<br/>trabalhadores antigos |
| `USR1`          | Reabrir arquivos de log                                                                                                                                                                                                                                                                                                  |
| `USR2`          | Atualizar o arquivo executável                                                                                                                                                                                                                                                                                           |
| `WINCH`         | Desligamento [gracioso](https://pt.angie.software//angie/docs/configuration/modules/core.md#worker-shutdown-timeout) dos processos trabalhadores                                                                                                                                                                         |

Você pode enviar sinais usando **kill**:

```console
$ sudo kill -QUIT $(cat /run/angie.pid)
```

Processos trabalhadores individuais também podem ser controlados usando sinais,
embora isso seja opcional. Os sinais suportados são:

| `TERM`, `INT`   | Desligamento rápido                                                                                                                                                   |
|-----------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `QUIT`          | Desligamento [gracioso](https://pt.angie.software//angie/docs/configuration/modules/core.md#worker-shutdown-timeout)                                                  |
| `USR1`          | Reabrir arquivos de log                                                                                                                                               |
| `WINCH`         | Terminação anormal para depuração (requer que [debug_points](https://pt.angie.software//angie/docs/configuration/modules/core.md#debug-points) esteja<br/>habilitado) |

<a id="control-config-change"></a>

## Alterando Configuração

Para que o Angie releia o arquivo de configuração, um sinal `HUP` deve
ser enviado ao processo mestre. O processo mestre primeiro verifica a validade
da sintaxe e então tenta aplicar a nova configuração, que inclui abrir novos
arquivos de log e sockets de escuta. Se a aplicação da nova configuração
falhar, o processo mestre reverte as mudanças e continua operando com a
configuração antiga. Se a aplicação for bem-sucedida, o processo mestre inicia
novos processos trabalhadores e envia mensagens aos processos trabalhadores
antigos, solicitando que eles desliguem [graciosamente](https://pt.angie.software//angie/docs/configuration/modules/core.md#worker-shutdown-timeout). Os processos trabalhadores antigos fecham seus
sockets de escuta e continuam a atender clientes existentes. Depois que todos
os clientes foram atendidos, os processos trabalhadores antigos são desligados.

O Angie rastreia mudanças de configuração para cada processo. Os números de
geração começam em 1 quando o servidor é iniciado pela primeira vez. Esses
números são incrementados a cada recarga de configuração e são visíveis nos
títulos dos processos:

```console
$ sudo angie
$ ps aux | grep angie

    angie: master process v|version| #1 [angie]
    angie: worker process #1
```

Após uma recarga de configuração bem-sucedida (independentemente de haver
mudanças reais), o Angie incrementa o número de geração para processos que
receberam a nova configuração:

```console
$ sudo kill -HUP $(cat /run/angie.pid)
$ ps aux | grep angie

    angie: master process v|version| #2 [angie]
    angie: worker process #2
```

Se quaisquer processos trabalhadores de gerações anteriores continuarem a
operar, eles se tornarão imediatamente visíveis:

```console
$ ps aux | grep angie

    angie: worker process #1
    angie: worker process #2
```

#### NOTE
Não confunda o número de geração da configuração com um 'número de processo';
o Angie não usa numeração contínua de processos para fins práticos.

<a id="log-rotation"></a>

## Rotação de Arquivos de Log

Para rotacionar arquivos de log, primeiro renomeie os arquivos. Em seguida,
envie um sinal `USR1` ao processo mestre. O processo mestre reabrirá
todos os arquivos de log atualmente abertos e os atribuirá a um usuário sem
privilégios sob o qual os processos trabalhadores estão executando. Após
reabrir com sucesso os arquivos, o processo mestre fecha todos os arquivos
abertos e notifica os processos trabalhadores para reabrirem seus arquivos de
log. Os processos trabalhadores também abrirão os novos arquivos e fecharão os
antigos imediatamente. Como resultado, os arquivos antigos ficam disponíveis
para pós-processamento, como compressão, quase imediatamente.

<a id="service-upgrade"></a>

## Atualização de Executável em Tempo Real

Para atualizar o executável do servidor, primeiro substitua o arquivo
executável antigo pelo novo. Em seguida, envie um sinal `USR2` ao
processo mestre. O processo mestre renomeará seu arquivo atual com o ID do
processo para um novo arquivo com o sufixo `.oldbin`, por exemplo,
`/usr/local/angie/logs/angie.pid.oldbin`, e então iniciará o novo
executável, que por sua vez inicia novos processos trabalhadores.

Note que o processo mestre antigo não fecha seus sockets de escuta e pode ser
gerenciado para reiniciar seus processos trabalhadores se necessário. Se o novo
executável não funcionar como esperado, você pode tomar uma das seguintes ações:

* Envie o sinal `HUP` ao processo mestre antigo. Isso iniciará novos
  processos trabalhadores sem reler a configuração. Você pode então desligar
  todos os novos processos [graciosamente](https://pt.angie.software//angie/docs/configuration/modules/core.md#worker-shutdown-timeout)
  enviando o sinal `QUIT` ao novo processo mestre.
* Envie o sinal `TERM` ao novo processo mestre. Ele enviará uma mensagem
  aos seus processos trabalhadores, solicitando que saiam imediatamente. Se
  quaisquer processos não saírem, envie o sinal `KILL` para forçá-los a
  sair. Quando o novo processo mestre sair, o processo mestre antigo iniciará
  automaticamente novos processos trabalhadores.

Se o novo processo mestre sair, o processo mestre antigo removerá o sufixo
`.oldbin` do nome do arquivo com o ID do processo.

Se a atualização for bem-sucedida, envie o sinal `QUIT` ao processo
mestre antigo, e apenas os novos processos permanecerão.

Quando configurado, o Angie também descarregará certas zonas de memória
compartilhada (atualmente, a `keys_zone` em [proxy_cache_path](https://pt.angie.software//angie/docs/configuration/modules/http/http_proxy.md#proxy-cache-path))
para o disco antes de atualizar,
para que o novo processo mestre possa restaurá-las
e assim melhorar o desempenho.
Se a restauração falhar devido a uma mudança no tamanho da zona,
incompatibilidade de versão binária ou outras razões,
o Angie registrará um alerta (`failed to restore zone at address`)
e não usará o mecanismo de restauração de zona.

<a id="runtime-cli-options"></a>

## Opções de Linha de Comando

| `-?`, `-h`     | Exibe ajuda para parâmetros de linha de comando e sai.                                                                                                                                                                |
|----------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `--build-env`  | Exibe informações auxiliares sobre o ambiente de compilação e sai.                                                                                                                                                    |
| `-c` arquivo   | Usa arquivo como o arquivo de configuração em vez do [arquivo padrão](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile).                                                                  |
| `-e` arquivo   | Usa arquivo como o arquivo de log de erro em vez do [arquivo padrão](https://pt.angie.software//angie/docs/configuration/processing.md#logging). O valor especial `stderr` especifica a saída de erro<br/>padrão.     |
| `-g` diretivas | Define [diretivas de configuração global](https://pt.angie.software//angie/docs/configuration/modules/core.md#core),<br/>por exemplo: `angie -g "pid /var/run/angie.pid; worker_processes<br/>`sysctl -n hw.ncpu`;"`. |
| `-m`, `-M`     | Exibe uma lista de módulos integrados (`-m`) ou integrados e<br/>carregados (`-M`) e sai.                                                                                                                             |
| `-p` prefixo   | Usa o caminho prefixo especificado para `angie` (o diretório onde os<br/>arquivos do servidor estão localizados; o padrão é `/usr/local/angie/`).                                                                     |
| `-q`           | Exibe apenas mensagens de erro se `-t` ou `-T` estiver<br/>definido; caso contrário, não tem efeito.                                                                                                                  |
| `-s` sinal     | Envia um [sinal](#control-signals) para o processo mestre:<br/>`stop`, `quit`, `reopen`, `reload`, e assim por diante.                                                                                                |
| `-t`           | Testa o arquivo de configuração e sai. O Angie verifica a<br/>sintaxe da configuração, incluindo recursivamente arquivos mencionados nele.                                                                            |
| `-T`           | Igual ao `-t`, mas também exibe o resumo da configuração na<br/>saída padrão após incluir recursivamente todos os arquivos mencionados na<br/>configuração.                                                           |
| `-v`           | Exibe a versão do Angie e sai.                                                                                                                                                                                        |
| `-V`           | Exibe a versão do Angie, versão do compilador, tempo de compilação<br/>e os [parâmetros de compilação](https://pt.angie.software//angie/docs/installation/sourcebuild.md#configure) usados, e sai.                    |
