每5分钟运行50个php脚本


Run 50 php scripts every 5 minutes

我在一台服务器上运行了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

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

拥有50个cron而不是一个的原因:

  • 如果其中一个cron失败,其他cron仍将运行
  • 如果其中一个cron失败,您将收到通知,并且不必进行复杂的日志分析来找出哪个cron失败了
  • 您不必担心(或不必担心)脚本超时、内存使用等:一次执行50个脚本大约是逐个执行脚本的50倍
  • 您可以在服务器上分配负载
  • (你可能会想更多)

至于最后一点(划分有效负载),我建议在0、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.

这是一种可以使用的模式:

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使其更容易。

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

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