¿Cómo gestionar un servicio systemd que necesita múltiples procesos?

¿Cómo gestionar un servicio systemd que necesita múltiples procesos?

Tengo un sitio web que requiere la ejecución de varios procesos (python, nodo, etc.). Actualmente tengo creado un servicio systemd para poder iniciar y detener esos procesos fácilmente. Creé un script de inicio que inicia todos los procesos que necesito como procesos en segundo plano (que se adjunta &al final del comando).

Esto me impide poder utilizar la función de reinicio automático de systemd cuando algo falla, ya que todos los procesos se inician con un solo script.

Una posible solución que se me ocurre sería crear un servicio para cada proceso y luego vincularlos todos creando un servicio maestro que Requireslos incluya. No soy un fanático de esto porque significa que necesito crear 4-5 servicios para cada entorno de este sitio web que quiero ejecutar.

¿Existe alguna manera de definir fácilmente un servicio que inicie múltiples procesos y supervise cada uno de ellos individualmente?

Respuesta1

Crea variosplantillaservicios, que se nombran así @:

Usando plantillas, puede iniciar una instancia con nombre para cada sitio web:

systemctl start [email protected] [email protected]
systemctl start [email protected] [email protected]

Dentro de dichas unidades de plantilla, puede utilizar %ipara hacer referencia al nombre de la instancia ("clientone" en este ejemplo). Entonces la unidad "principal" (servicio u objetivo) podría tener:

[Unit]
Requires=pythonthingy@%i.service
...
[Service]
Environment="DOCROOT=/var/www/%i"

Si cada sitio necesita varios parámetros, puede cargarlos desde un archivo:

[Service]
EnvironmentFile=/etc/someconfigdir/%i.conf

Si algunos sitios necesitan configuraciones de unidad no estándar en comparación con el resto, utilice complementos:

Las plantillas, complementos y expansiones como %i se explican enunidad.systemd(5).

información relacionada