每5分钟运行50个PHP脚本

时间:2014-04-08 10:10:47

标签: php wordpress bash cron

我在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

3 个答案:

答案 0 :(得分:2)

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

拥有50个crons而非一个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.

答案 1 :(得分:0)

这是您可以使用的模式:

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 :(得分:0)

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

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