【问题标题】:Loop in php script from cron?从cron循环php脚本?
【发布时间】:2016-03-17 17:00:53
【问题描述】:

我有一个作为 cron 作业运行的 wordpress php 脚本。它目前无限期地每个域每分钟运行一次。

    /usr/bin/php -q /home/domain1/public_html/wp-content/plugins/tdw/postit.php > /dev/null 2>&1

问题是我的服务器越来越大,有 50 多个域,并且 cron 相互运行导致错误或数据库崩溃。

有没有办法让它按顺序运行?比如运行 domain1 脚本等待一分钟然后运行 ​​domain2...循环遍历 url 列表。

感谢您的帮助。

【问题讨论】:

    标签: php wordpress bash cron


    【解决方案1】:

    将它们放在 bash 脚本中,例如

    #!/bin/bash
    
    /usr/bin/php -q /home/domain1/public_html/wp-content/plugins/tdw/postit.php > /dev/null
    sleep 60s
    /usr/bin/php -q /home/domain2/public_html/wp-content/plugins/tdw/postit.php > /dev/null
    sleep 60s
    /usr/bin/php -q /home/domain3/public_html/wp-content/plugins/tdw/postit.php > /dev/null
    sleep 60s
    # and so on...
    

    并从 cron 开始。

    如果路径除了域名都一样,你也可以使用php脚本,它为每个域生成正确的路径,然后通过exec()执行脚本。例如,它可以通过 PHP 的 directory functions 遍历 /home 文件夹的内容。这样,您就不必在添加域时更新脚本。

    这样的脚本看起来像

    <?php
    
    $template = '/usr/bin/php -q /home/%s/public_html/wp-content/plugins/tdw/postit.php > /dev/null';
    
    if ($handle = opendir('/home')) {
        while (false !== ($entry = readdir($handle))) {
            $command = sprintf($template, entry);
            exec($command);
            sleep(60);
        }
    }
    
    ?>
    

    【讨论】:

      【解决方案2】:

      刚刚通过 cron 在我的 NAS 上执行的脚本遇到了类似的问题,结果我的查询中有错误,我确实错过了引号

      WHERE myvarcharfield = 12345
      

      改为

      WHERE myvarcharfield = '12345'
      

      不知道为什么脚本似乎正确执行,然后中断循环,但它也没有返回错误

      【讨论】:

        猜你喜欢
        • 2010-11-10
        • 2014-11-01
        • 2018-07-05
        • 2013-09-08
        • 2017-08-25
        • 1970-01-01
        • 2018-03-22
        • 1970-01-01
        • 2016-11-20
        相关资源
        最近更新 更多