【问题标题】:Show Number of Times a PHP Script is Running via Cron显示 PHP 脚本通过 Cron 运行的次数
【发布时间】:2015-08-14 07:24:07
【问题描述】:

我有一个通过 cron 在服务器上运行作业的 php 脚本。基本上,cron 每分钟运行一次,例如:

        • php /path/to/my/script/script.php

此脚本可以多次运行,并持续运行一段时间。

我正在尝试做的是找到一种方法来读取为此用户运行的进程,并计算 script.php 运行的次数。在 cron 实际运行之前。基本上,如果有 10 个脚本实例正在运行,则在运行少于 10 个之前不会启动它的其他实例。如果有 10 个正在运行,我需要确保它不会启动。

希望这是有道理的。 ;)

【问题讨论】:

  • 感谢@Jan J 和@maxime.bochon 对于有类似问题的任何人,我所做的是:totalatm=ps ax | grep 'php /home/xxxx/public_html/cron/xxxx.php' | wc -l` if [ "$totalatm" -le 10 ];然后 php /home/xxxxx/public_html/cron/xxxxx.php else echo "nothing to do"; fi` xxx 只是注释掉我自己的路径和文件名......你可以忽略它

标签: php linux process cron


【解决方案1】:

读取过程取决于您使用的操作系统,并且不会相同。相反,每次您的脚本运行时,您都可以将详细信息写入数据库。喜欢;

process_name  - run_time - is_completed 

在脚本运行之前,您需要检查进程表中是否有超过 10 个未完成的进程。您还将拥有日志记录

【讨论】:

    【解决方案2】:

    首先,您应该将对 PHP 脚本的调用放在 Shell 脚本中。

    在此脚本中,第一步是计算 PHP 程序当前运行的实例数。

    如果计数低于定义的限制(在您的情况下为10),请运行 PHP 程序的新实例。

    现在关于如何计算当前正在运行的实例,您可以使用ps 命令与grep 命令(过滤进程)和wc -l 命令(进行计数)来实现这一点。

    或者您可以在运行新实例之前创建一个唯一的空文件,例如 /tmp/php_script_<timestamp>,并在 PHP 脚本结束时将其删除。

    然后计数实例将等同于计数/tmp 中以php_script_ 开头的文件数(另一个grep 使用wc -l 管道)。

    【讨论】:

    • 感谢 maxime.bochon 和 Jan J... 效果很好。
    【解决方案3】:

    如果您希望它使用 bash 脚本检查它,请尝试将 ps axgrep 结合使用:

    ps ax | grep 'php /home/janj/www/test.php'
    

    这将返回类似于此的内容:

    17857 ?        Ss     0:00 /bin/sh -c php /home/janj/www/test.php
    17858 ?        S      0:00 php /home/janj/www/test.php
    17897 ?        Ss     0:00 /bin/sh -c php /home/janj/www/test.php
    17898 ?        S      0:00 php /home/janj/www/test.php
    17903 pts/7    S+     0:00 grep --color=auto php /home/janj/www/test.php
    

    将它与 ma​​xime.bochon 答案结合起来,您将获得完整的解决方案。

    【讨论】:

      猜你喜欢
      • 2019-07-23
      • 2016-04-14
      • 2020-02-28
      • 1970-01-01
      • 2020-11-10
      • 2012-04-20
      • 1970-01-01
      • 2012-11-14
      • 2017-08-11
      相关资源
      最近更新 更多