【问题标题】:Run constant number of php scripts on server在服务器上运行恒定数量的 php 脚本
【发布时间】:2012-05-22 04:49:48
【问题描述】:

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

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

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

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

感谢您仍在学习 linux 方面的帮助!

【问题讨论】:

    标签: php shell cron monitoring lamp


    【解决方案1】:

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

    看看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

    希望对大家有所帮助!

    【讨论】:

    • 这行得通,谢谢!我唯一需要改变的是 ps aux | grep "curl localhost/php/MyScript.php" | grep -v grep | wc -l 因为我必须卷曲脚本才能使其运行。我需要脚本中的 Zend 类,当我尝试使用 /usr/bin/php 运行它时,它会变成 kablooey(我知道的技术术语)。但这是另一个问题的主题。感谢您的出色回答和清晰的描述!
    猜你喜欢
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多