<!-- review: finished -->

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

# Control en Tiempo de Ejecución

Para iniciar Angie, utilice **systemd** con el siguiente comando:

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

Se recomienda comprobar antes la sintaxis de la configuración. He aquí cómo hacerlo:

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

Para recargar la configuración:

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

Para detener Angie:

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

Después de la instalación, ejecute el siguiente comando para asegurarse de que Angie está funcionando:

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

#### NOTE
Los métodos para ejecutar la versión de código abierto de Angie pueden variar en función
del método de instalación.

Angie tiene un proceso maestro y varios procesos de trabajo. El proceso maestro se encarga de
leer y evaluar la configuración y de mantener los procesos de trabajo. Los procesos de trabajo
gestionan el procesamiento real de las peticiones. Angie utiliza un modelo basado en eventos y
mecanismos dependientes del sistema operativo para distribuir eficazmente las peticiones entre
los procesos de trabajo. El número de procesos de trabajo se define en el archivo de configuración
y puede ser fijo para una configuración dada o ajustarse automáticamente en función del número de
núcleos de CPU disponibles (consulte [worker_processes](https://es.angie.software//angie/docs/configuration/modules/core.md#worker-processes)).

Cuando está configurado, Angie también vaciará ciertas zonas de memoria compartida
(actualmente, `keys_zone` en [proxy_cache_path](https://es.angie.software//angie/docs/configuration/modules/http/http_proxy.md#proxy-cache-path))
al disco antes de salir,
de modo que el nuevo proceso maestro pueda restaurarlas
y así mejorar el rendimiento.
Si la restauración falla debido a un cambio en el tamaño de la zona,
incompatibilidad de versión binaria u otras razones,
Angie registrará una alerta (`failed to restore zone at address`)
y no utilizará el mecanismo de restauración de zonas.

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

## Uso de Señales

Angie también puede controlarse mediante señales. Por defecto, el ID de proceso del
proceso maestro se escribe en el archivo `/run/angie.pid`. Este
nombre de archivo puede cambiarse en tiempo de configuración o en `angie.conf` mediante la
directiva [pid](https://es.angie.software//angie/docs/configuration/modules/core.md#pid). El proceso maestro admite las siguientes señales:

| `TERM`, `INT`   | Apagado rápido                                                                                                                                                                                                                                                                                                     |
|-----------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `QUIT`          | Apagado [elegante](https://es.angie.software//angie/docs/configuration/modules/core.md#worker-shutdown-timeout)                                                                                                                                                                                                    |
| `HUP`           | Recargar configuración, actualizar zona horaria (solo para FreeBSD y Linux),<br/>iniciar nuevos procesos de trabajo con la configuración actualizada,<br/>apagar [elegantemente](https://es.angie.software//angie/docs/configuration/modules/core.md#worker-shutdown-timeout) los antiguos<br/>procesos de trabajo |
| `USR1`          | Reabrir archivos de registro                                                                                                                                                                                                                                                                                       |
| `USR2`          | Actualizar el archivo ejecutable                                                                                                                                                                                                                                                                                   |
| `WINCH`         | Apagado [elegante](https://es.angie.software//angie/docs/configuration/modules/core.md#worker-shutdown-timeout) de procesos de trabajo                                                                                                                                                                             |

Puede enviar señales usando **kill**:

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

También se pueden controlar procesos de trabajo individuales usando señales, aunque esto
es opcional. Las señales admitidas son:

| `TERM`, `INT`   | Apagado rápido                                                                                                                                                          |
|-----------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `QUIT`          | Apagado [elegante](https://es.angie.software//angie/docs/configuration/modules/core.md#worker-shutdown-timeout)                                                         |
| `USR1`          | Reabrir archivos de registro                                                                                                                                            |
| `WINCH`         | Terminación anómala para depuración (requiere que [debug_points](https://es.angie.software//angie/docs/configuration/modules/core.md#debug-points) esté<br/>habilitado) |

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

## Cambiar la Configuración

Para que Angie vuelva a leer el archivo de configuración, debe enviarse una señal `HUP`
al proceso maestro. El proceso maestro primero comprueba la validez de la sintaxis y luego intenta
aplicar la nueva configuración, lo que incluye abrir nuevos archivos de registro y sockets de
escucha. Si aplicar la nueva configuración falla, el proceso maestro revierte los cambios y
continúa operando con la configuración anterior. Si la aplicación tiene éxito, el proceso maestro
inicia nuevos procesos de trabajo y envía mensajes a los antiguos solicitando que se apaguen
[elegantemente](https://es.angie.software//angie/docs/configuration/modules/core.md#worker-shutdown-timeout). Los antiguos procesos de trabajo cierran sus
sockets de escucha y continúan atendiendo a los clientes existentes.
Una vez servidos todos los clientes, los antiguos procesos de trabajo se apagan.

Angie rastrea los cambios de configuración para cada proceso. Los números de generación
comienzan en 1 cuando el servidor se inicia por primera vez. Estos números se incrementan con
cada recarga de configuración y son visibles en los títulos de procesos:

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

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

Tras una recarga de configuración exitosa (independientemente de que haya cambios reales),
Angie incrementa el número de generación para los procesos que recibieron la nueva configuración:

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

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

Si continúan operando procesos de trabajo de generaciones anteriores,
serán visibles de inmediato:

```console
$ ps aux | grep angie

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

#### NOTE
No confunda el número de generación de la configuración con un "número de proceso";
Angie no utiliza numeración continua de procesos por motivos prácticos.

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

## Rotación de Archivos de Registro

Para rotar archivos de registro, primero renómbrelos. Luego, envíe una señal `USR1` al
proceso maestro. Este reabrirá todos los archivos de registro abiertos y los asignará al
usuario sin privilegios bajo el cual se ejecutan los procesos de trabajo. Tras reabrir los
archivos correctamente, el proceso maestro cierra todos los archivos abiertos y notifica a
los procesos de trabajo que reabran sus archivos de registro. Estos abrirán los nuevos
archivos y cerrarán los antiguos inmediatamente. Como resultado, los archivos antiguos quedan
disponibles casi de inmediato para el posprocesamiento, como la compresión.

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

## Actualización del Ejecutable en Vivo

Para actualizar el ejecutable del servidor, primero sustituya el archivo antiguo por el
nuevo. Luego, envíe una señal `USR2` al proceso maestro. Este renombrará su archivo
actual con el ID de proceso añadiéndole el sufijo `.oldbin`,
por ejemplo `/usr/local/angie/logs/angie.pid.oldbin`,
y luego iniciará el nuevo ejecutable, que a su vez iniciará nuevos procesos de trabajo.

Tenga en cuenta que el antiguo proceso maestro no cierra sus sockets de escucha y puede
gestionarse para reiniciar sus procesos de trabajo si es necesario. Si el nuevo ejecutable no
funciona como se espera, puede tomar una de las siguientes acciones:

* Enviar la señal `HUP` al antiguo proceso maestro. Esto iniciará nuevos procesos de
  trabajo sin volver a leer la configuración. Puede apagar todos los nuevos procesos
  [elegantemente](https://es.angie.software//angie/docs/configuration/modules/core.md#worker-shutdown-timeout) enviando la señal `QUIT` al nuevo
  proceso maestro.
* Enviar la señal `TERM` al nuevo proceso maestro. Este enviará un mensaje a sus
  procesos de trabajo solicitando que salgan inmediatamente. Si alguno no sale, envíe la
  señal `KILL` para forzarlo. Cuando el nuevo proceso maestro salga, el antiguo iniciará
  automáticamente nuevos procesos de trabajo.

Si el nuevo proceso maestro sale, el antiguo eliminará el sufijo `.oldbin` del nombre de
archivo con el ID de proceso.

Si la actualización es exitosa, envíe la señal `QUIT` al antiguo proceso maestro, y solo
quedarán los nuevos procesos.

Cuando está configurado, Angie también vaciará ciertas zonas de memoria compartida
(actualmente, `keys_zone` en [proxy_cache_path](https://es.angie.software//angie/docs/configuration/modules/http/http_proxy.md#proxy-cache-path))
al disco antes de actualizar,
de modo que el nuevo proceso maestro pueda restaurarlas
y así mejorar el rendimiento.
Si la restauración falla debido a un cambio en el tamaño de la zona,
incompatibilidad de versión binaria u otras razones,
Angie registrará una alerta (`failed to restore zone at address`)
y no utilizará el mecanismo de restauración de zonas.

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

## Opciones de Línea de Comandos

| `-?`, `-h`      | Mostrar ayuda para los parámetros de línea de comandos y salir.                                                                                                                                                                    |
|-----------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `--build-env`   | Mostrar información auxiliar sobre el entorno de compilación y salir.                                                                                                                                                              |
| `-c` file       | Usar file como archivo de configuración en lugar del [archivo predeterminado](https://es.angie.software//angie/docs/configuration/configfile.md#configfile).                                                                       |
| `-e` file       | Usar file como archivo de registro de errores en lugar del [archivo predeterminado](https://es.angie.software//angie/docs/configuration/processing.md#logging). El valor especial `stderr` especifica la salida de error estándar. |
| `-g` directives | Establecer [directivas de configuración globales](https://es.angie.software//angie/docs/configuration/modules/core.md#core),<br/>por ejemplo: `angie -g "pid /var/run/angie.pid; worker_processes<br/>`sysctl -n hw.ncpu`;"`.      |
| `-m`, `-M`      | Mostrar una lista de módulos incorporados (`-m`) o incorporados y cargados<br/>(`-M`), y luego salir.                                                                                                                              |
| `-p` prefix     | Usar la ruta prefix especificada para `angie` (el directorio donde se encuentran los<br/>archivos del servidor; el valor predeterminado es `/usr/local/angie/`).                                                                   |
| `-q`            | Mostrar solo mensajes de error si se establece `-t` o `-T`;<br/>de lo contrario, no tiene efecto.                                                                                                                                  |
| `-s` signal     | Enviar una [señal](#control-signals) al proceso maestro:<br/>`stop`, `quit`, `reopen`, `reload`, etc.                                                                                                                              |
| `-t`            | Probar el archivo de configuración y salir. Angie comprueba la<br/>sintaxis de la configuración, incluyendo de forma recursiva los archivos mencionados en ella.                                                                   |
| `-T`            | Igual que `-t`, pero además muestra el resumen de configuración en la salida estándar<br/>tras incluir recursivamente todos los archivos mencionados en la configuración.                                                          |
| `-v`            | Mostrar la versión de Angie y salir.                                                                                                                                                                                               |
| `-V`            | Mostrar la versión de Angie, la versión del compilador, el tiempo de compilación<br/>y los [parámetros de compilación](https://es.angie.software//angie/docs/installation/sourcebuild.md#configure) utilizados, y salir.           |
