我目前正在使用 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
捕获死进程。