【问题标题】:Run 50 php scripts every 5 minutes每 5 分钟运行 50 个 php 脚本
【发布时间】:2014-05-20 23:06:00
【问题描述】:

我在 1 台服务器上运行了 50 个 Wordpress 安装。每个 Wordpress 网站都有一个必须每 5 分钟执行一次的脚本。我不想使用 Wordpress 的内置 cron 并想从 cron 运行脚本。最好的解决方案是什么?

*解决方案 1:为每个单独的 wordpress 安装创建一个 cron 作业 *

5   *   *   *   *   /usr/bin/php /wordpress-site-1/cron.php
5   *   *   *   *   /usr/bin/php /wordpress-site-2/cron.php
5   *   *   *   *   /usr/bin/php /wordpress-site-3/cron.php
... + 47 other scripts

*解决方案 2:创建 1 个 cron 作业并运行 bash 脚本 *

 5  *   *   *   *   /run/the-script

脚本:

 #!/bin/bash
    # include the 50 sites in array
    array=( wordpress-site-1 wordpress-site-2 wordpress-site-3 ...)
    for i in "${array[@]}"
    do
        {execute php file) 
    done

【问题讨论】:

  • 我认为让一个脚本调用其余脚本更易于维护。在 crontab 中有 50 行是很难管理的。

标签: php wordpress bash cron


【解决方案1】:

这是您可以使用的模式:

0,5,10,15,20,25,30,35,40,45,50,55 * * * *

试试这个解决方案:

cat cronjob
0,5,10,15,20,25,30,35,40,45,50,55 * * * * /usr/bin/php /wordpress-site-1/cron.php
 .
 .
 .
0,5,10,15,20,25,30,35,40,45,50,55 * * * * /usr/bin/php /wordpress-site-50/cron.php

然后:

chmod +x cronjob
chmod +x /wordpress-site-1/cron.php
 .
 .
 .
chmod +x /wordpress-site-50/cron.php

/etc/init.d/crond start  #redhat based servers like centos
/etc/init.d/cron  start  #debian based servers like ubuntu

crontab cronjob

注意:您可以使用for loop 来简化操作。

【讨论】:

    【解决方案2】:

    到目前为止,拥有 50 个单数 cron 比在一个脚本中运行要高效得多。唯一的缺点是您必须在 crontab 中插入 50 行。但是,嘿,如果这就是一切……

    使用 50 个 crons 而不是 1 个的原因:

    • 如果其中一个 crons 失败,其他的仍会运行
    • 如果其中一个 crons 失败,您会收到通知,无需进行复杂的日志分析即可找出您的哪一个 crons 失败
    • 您不必担心(或少担心)脚本超时、内存使用等问题:一次执行 50 个脚本比逐个执行要重约 50 倍
    • 您可以在服务器上划分有效负载
    • (你可能会想更多)

    至于最后一点(划分有效负载),我建议在零、过去 5 点、过去 10 点等处执行前 10 个脚本,一分钟后执行接下来的 10 个脚本。这样它们就不会一次全部运行,导致每 5 分钟出现一次高峰负载:

    0,5,10,15,20,25,30,35,40,45,50,55   *   *   *   *   /usr/bin/php /wordpress-site-1/cron.php
    ... cron 2 - 10
    1,6,11,16,21,26,31,36,41,46,51,56 /usr/bin/php /wordpress-site-11/cron.php
    ... cron 11-20
    ... etc.
    

    【讨论】:

      【解决方案3】:

      如果您希望每个脚本每 5 分钟运行一次,您可以这样做:

      */5 * * * * /run/the-script
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-04
        • 2014-06-27
        • 1970-01-01
        • 1970-01-01
        • 2019-10-26
        • 1970-01-01
        • 2011-08-12
        • 2021-03-15
        相关资源
        最近更新 更多