Servicio demonio que ejecuta una secuencia de procesos (distribución equilibrada)

Servicio demonio que ejecuta una secuencia de procesos (distribución equilibrada)

Tengo el siguiente problema. Tengo un proceso de aprendizaje automático que se ejecuta en segundo plano. Aún mejor, tengo muchos (digamos 5) que quiero ejecutar. Cada uno de ellos consume energía de CPU y GPU y, por lo tanto, le gustaría ejecutar solo uno de ellos a la vez durante un período de tiempo específico (es decir, 1 hora, en realidad el script en sí puede cerrarse después de 1 hora), luego detenerlo y ejecutar otro. uno. De esta manera puedo entrenarlos a todos mientras la máquina está funcionando durante varios días simultáneamente.

El desafío es el siguiente: quiero ejecutarlos equilibrados/girados. En lugar de ejecutar el primero, luego el segundo, el tercero, etc. Quiero que el script/controlador se asegure de que después de ejecutar el primero y reiniciar la máquina (o reiniciar el servicio advenedizo o algo así), se ejecute el segundo. Quiero evitar una situación en la que después de cada reinicio comienza con el mismo proceso y la mayor parte del tiempo se dedica al primero y menos al último.

¿Alguien podría sugerir una solución lista para usar (excepto escribir mi propio script/controlador, que obviamente es fácil, pero me gustaría probar algo a fondo en lugar de algo propio que deba administrar)?

Respuesta1

Depende de qué tan robusto quieras que sea. Una solución simple que ejecuta el programa "siguiente" en una lista circular podría verse así:

#! /usr/bin/env bash

programs=(program1 program2 program3 program4 program5)
state=$HOME/.${0#*/}_state

if [ -f "$state" ]; then
    read idx <"$state"
    if expr "$idx" : '[0-9][0-9]*$' >/dev/null; then
        let idx=(idx+1)%${#programs[@]}
    else
        let idx=0
    fi
else
    let idx=0
fi
printf '%d\n' "$idx" >"$state" || exit 1

exec "${programs[$idx]}" "$@"

Si desea algo más robusto, necesita bloquear y probablemente mantener el estado en una base de datos.

información relacionada