1

我在 AWS 灯服务器上并行运行 php 脚本。现在我有一个 cron 作业设置为以 10 分钟的间隔运行每个脚本,然后脚本设置为在运行 20 分钟后退出。我限制每个脚本运行的时间,以免服务器内存不足。我已尽力堵住内存漏洞,但在我处理此问题时,将脚本超时是一个很好的临时解决方案。

问题是我同时运行了太多脚本。因此,与其使用 cron 以设定的时间间隔运行脚本,不如我如何编写服务器脚本以

A)监视在任何给定时刻正在运行的特定 php 脚本实例的数量

B)如果该数字低于 n(比如 4 个实例),服务器会启动另一个 php 脚本实例吗?

感谢您仍在学习我在 Linux 上的方式的帮助!

4

1 回答 1

3

最好的方法可能是编写您自己的守护进程,该守护进程运行、派生子进程、监视它们,并根据需要重新启动它们。

看看http://php.net/manual/en/book.pcntl.php

但是,在您的情况下,可能有一个更简单的答案......放置一个一分钟的 crontab 来调用您的加载程序脚本,如下所示:

* * * * *  /usr/bin/php /path/to/loader.php

加载程序脚本可以是一个简单的 shell 脚本(或 php 脚本)。在 shell 中运行此命令。它将返回您正在运行的脚本的实例数。

ps aux | grep "/usr/bin/php /path/to/thing/you/run.php" | grep -v grep | wc -l

如果 # 个实例 > 3,则不要启动一个。否则,开始一个。如果在 PHP 中,您可以简单地包含所需的文件。如果在 bash 中,只需编写/usr/bin/php /path/to/thing/you/run.php

希望对一些人有所帮助!

于 2012-05-14T17:03:54.493 回答