关于wordpress:从cron的php脚本中循环?

Loop in php script from cron?

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

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

问题是我的服务器越来越大,有50个域,并且各个分支之间相互运行,从而导致错误或数据库崩溃。

有没有一种方法可以使它按顺序运行?例如运行domain1脚本等待一分钟,然后运行domain2 ...在URL列表中循环。

感谢您的帮助。


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

1
WHERE myvarcharfield = 12345

istead

1
WHERE myvarcharfield = '12345'

不确定为什么脚本似乎仍然正确执行并且在那之后中断了循环,但是它也没有返回错误


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

1
2
3
4
5
6
7
8
9
#!/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的目录功能遍历/ home文件夹的内容。这样,添加域时不必更新脚本。

这样的脚本看起来像

1
2
3
4
5
6
7
8
9
10
11
12
13
<?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);
    }
}

?>