维持程序运行的 100 个实例

维持程序运行的 100 个实例

我目前正在使用 Supervisord 来维护同时运行的 100 个脚本实例。如果有一个死亡,那么它会启动一个新的。

然而,它似乎很难维持更大的数量(> 300 个进程),我正在寻找替代品。 Monit 似乎没有做我想要的事情,因为它监视单个脚本,并且似乎无法轻松监视同一脚本的 100 个实例。

关于我可以使用的不同工具有什么建议吗?

答案1

您可以使用:

ps h --ppid $$ | wc -l

从 bash 脚本获取子进程的数量(记住这包括 ps)。因此,如果您想要 1000 个进程,请检查是否返回 1001。如果没有,则使用以下命令启动它们:

cmd &

以便它们作为当前脚本的子级运行(因此包含在计数中)。然后您可以休眠一会儿,然后永远在循环中再次检查。要记住的一件事是,如果您要生成其他进程,则需要修改命令ps以过滤所需的进程。

第一个命令是这个难题的核心部分,在您有了脚本之前,它应该再多一点。

答案2

我会pgrep|wc -l在简单的 shell 脚本中使用类似的东西。在每次检查之间等待一秒(如果您愿意,在 Linux 上可以等待更短的时间)sleep

答案3

如果您的脚本死掉并且只是返回到 shell,您可以为每个实例使用一个包装器脚本:

while [ 1 == 1 ] ; do /path/to/script ; done

或者您编写一些包装器来分叉脚本,并用于wait/waitpid捕获死进程。

相关内容