运行一系列进程的守护程序服务(平衡分布)

运行一系列进程的守护程序服务(平衡分布)

我有以下问题。我有一个在后台运行的机器学习过程。更好的是,我有很多(假设有 5 个)我想运行它们。它们中的每一个都消耗 CPU 和 GPU 的电量,因此希望在特定的时间段(即 1 小时,实际上脚本本身能够在 1 小时后关闭)内只运行其中一个,然后停止它并运行另一个一。这样我就可以在机器同时运行几天的同时训练所有这些人。

挑战如下:我想让它们平衡/旋转地运行。我希望脚本/处理程序确保在运行第一个脚本并重新启动机器(或重新启动新贵服务或类似的操作)后运行第二个脚本/处理程序,而不是运行第一个,然后运行第二个,第三个等。我想避免这样的情况:每次重新启动后,它都会以相同的进程开始,并且大部分时间都花在第一个进程上,而最少的时间花在最后一个进程上。

任何人都可以建议一个开箱即用的解决方案(除了编写我自己的脚本/处理程序,这显然很容易,但我想要一些经过彻底测试的东西,而不是我自己需要管理的东西)。

答案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]}" "$@"

如果你想要更健壮的东西,你需要锁定,并且可能将状态保存在数据库中。

相关内容