Ejecute múltiples servicios con diferentes argumentos

Ejecute múltiples servicios con diferentes argumentos

Creé un script en Python para procesar algunos datos que quiero ejecutar como un servicio. El script procesa los datos y luego duerme durante un tiempo para procesar los nuevos datos que han ido llegando.

Mi problema es que quiero ejecutar varias instancias del servicio ya que tengo algunas fuentes de datos diferentes que quiero procesar y mi secuencia de comandos está diseñada para manejar una fuente de datos a la vez.

Veo algunas formas diferentes de hacer esto:

Podría reescribir el script para manejar todas las fuentes de datos; esto lo hará inutilizable para uso ad hoc y también hará que sea más difícil actualizar el conjunto de fuentes de datos, ya que no es posible descubrir automáticamente las fuentes que se han agregado o eliminado. Así que aunque es posible, esta es mi opción menos favorable.

Podría crear un script contenedor en bash o python que inicie scripts para las fuentes de datos que quiero procesar. Esto también parece un poco torpe.

Podría crear un archivo unitario para cada fuente de datos, cada uno llamando al script de procesamiento con los argumentos apropiados, esto me dará una cantidad de archivos del sistema, es decir, Processing_ds1.system, Processing_ds2.system, etc. Para mí, esto me parece una forma posible. a menos que haya alguna buena razón para no hacerlo.

Mi forma preferida sería crear un archivo de sistema que pueda llamarse con argumentos para cada fuente de datos o iniciar todas las instancias dentro del archivo de sistema.

Entonces tengo dos alternativas:

¿Cómo es posible utilizar argumentos con archivos unitarios? He visto que postgresql puede iniciar diferentes versiones usando @, es decir

systemctl start postgres@12-main

para iniciar el cluster 12-main. ¿Pero cómo se hace esto? No puedo encontrar ningún archivo de unidad útil para postgresql.

O

¿Es posible y aconsejable iniciar múltiples servicios desde un archivo unitario?

Respuesta1

Puede utilizar un archivo de unidad de plantilla:unidad.systemd

Para OpenVPN como ejemplo: puede crear un archivo de unidad con un nombre [email protected]con /etc/systemd/systemel siguiente contenido:

[Unit]
Description=OpenVPN connection to %i
After=network-online.target
Wants=network-online.target

[Service]
Type=forking
ExecStart=/usr/sbin/openvpn --config /etc/openvpn/%i.conf
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target

Cada vez que ejecute systemctl start openvpn@myconfig systemd sustituirá %i en el archivo de la unidad por "myconfig". Entonces ejecuta /usr/sbin/openvpn --config /etc/openvpn/myconfig.conf

información relacionada