Служба-демон, которая запускает последовательность процессов (сбалансированное распределение)

Служба-демон, которая запускает последовательность процессов (сбалансированное распределение)

У меня следующая проблема. У меня есть процесс машинного обучения, который работает в фоновом режиме. Еще лучше, у меня их много (скажем, 5), которые я хочу запустить. Каждый из них потребляет энергию CPU и GPU, и поэтому я хотел бы запустить только один из них в определенный период времени (например, 1 час, на самом деле сам скрипт может закрыться через 1 час), затем остановить его и запустить другой. Таким образом, я могу обучить их все, пока машина работает в течение нескольких дней одновременно.

Задача следующая: я хочу запустить их сбалансированно/поочередно. Вместо того, чтобы запускать первый, затем второй, третий и т. д., я хочу, чтобы скрипт/обработчик гарантировал, что после запуска первого и перезапуска машины (или перезапуска службы upstart или чего-то в этом роде) будет запущен второй. Я хочу избежать ситуации, когда после каждого перезапуска он запускается с одним и тем же процессом и большая часть времени тратится на первый, а меньше всего на последний.

Может ли кто-нибудь предложить готовое решение (кроме написания собственного скрипта/обработчика, что, очевидно, легко, но мне хотелось бы получить что-то тщательно протестированное, а не что-то свое, чем мне нужно управлять).

решение1

Зависит от того, насколько надежным вы хотите его видеть. Простое решение, которое запускает «следующую» программу в круговом списке, может выглядеть так:

#! /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]}" "$@"

Если вам нужно что-то более надежное, вам понадобится блокировка и, возможно, сохранение состояния в базе данных.

Связанный контент