维护程序正在运行的100个实例


12

我目前正在使用超级用户来维护一次运行的100个脚本实例。如果有任何死亡,那么它将启动一个新的死亡。

但是,要保持更大的数量(> 300个进程)似乎很困难,我正在寻找替代产品。Monit似乎不执行我想要的操作,因为它监视单个脚本,并且似乎无法轻松监视同一脚本的100个实例。

关于可以使用的其他工具有什么建议吗?


这些脚本在做什么,为什么要多个实例?它们是在不同的论据/环境下运行还是以其他方式运行?
psusi'1

1
一个简单的bash脚本可以工作吗?类似于...计算正在运行的脚本进程的数量,如果少于100,则启动缺少的脚本数量?
gabe。

3
你想达到什么目的?为什么这300个进程中的一些会死掉?可能有更好的方法来完成任务,其中最重要的一点是,如果运行的299个脚本实例少于300个,则说明您的应用程序体系结构存在缺陷。重新启动已经死掉的进程而又不了解为什么会死掉,通常只会导致另一个死机,并导致大量的开销。
msw 2012年

我正在使用一个旧系统在处理URL,每个旧系统都需要自己的线程(用PHP编写)。是的,该体系结构有缺陷,但仍必须使用它……目前正在研究一种新的结构:)
jong

Answers:


1

您可以使用:

ps h --ppid $$ | wc -l

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

cmd &

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

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


0

我将pgrep|wc -l在一个简单的shell脚本中使用诸如此类的东西。每次检查之间请等待一秒钟(如果需要,在Linux上更短)sleep


0

如果您的脚本死了,只是回到了外壳,则可以为每个实例使用包装器脚本:

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

或者您编写一些派生脚本的包装程序,并用于wait/waitpid捕获死进程。


1
万一脚本有一些终端总是失败的情况(切片已满,无法读取配置文件等),我至少会在那儿睡个好觉。否则,您可能会有100个进程继续运行一片CPU。另外-100 *(bash进程+失败应用程序的初始启动足迹)==可能是少量的ram)
synthesizerpatel
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.