PHP脚本执行时间可能为2周?

时间:2017-11-21 21:23:57

标签: php

我创建了一个擦除1 mio的PHP脚本。域并分析内容。我在本地进行了测试,每1000个网域需要花费20分钟。

我可以使用它设置服务器并让它运行2周,或者有一个原因导致PHP文件在某段执行时间后崩溃?

4 个答案:

答案 0 :(得分:2)

如果从控制台运行PHP,则没有最长执行时间。话虽这么说,如果执行需要2周,你应该重新构建你的想法。也许有一个js前端调用PHP脚本,一次擦除5或10个域......

答案 1 :(得分:1)

当然,如果您通过命令行运行代码或设置max_execution_time

,则可以

据说,如果您在Linux机器上运行此代码,请考虑pThreads,我强烈建议您重新设计代码。如果您在Windows机器上运行,那么您尝试执行的任务似乎更容易使用c#。

注意我不能强调,如果你使用线程来完成这项任务,它会更快。

答案 2 :(得分:0)

我建议如下:

  1. 每次执行时将脚本限制为X域。
  2. 创建一个每分钟运行脚本的CRON。
  3. 这样你就不必过多担心内存泄漏。您可能还希望在流程开始时创建.lock文件,以确保您的CRON在完成之前不会运行该脚本。有时,当您从其他网站请求信息时,可能需要很长时间......

答案 3 :(得分:0)

cron-jobs的问题在于它们最终可能会过度运行,因此同时运行多个副本。如果您同时从Cron运行多个副本,则会出现巨大的负载峰值,但在每分钟的最后30秒内可能没有任何运行。 (相信我,我已经看到它发生了,它不是很漂亮)。

可以使用普通的Linux启动机制轻松设置一个简单的shell脚本,并且它们将永远循环。在这里,我添加了检查退出PHP脚本(或其他)以退出循环的功能。添加其他检查以故意减慢执行速度。这是关于这个主题的my blogpost

我会安排脚本在10-50个域擦除的地方运行,然后退出,准备好再次运行,直到找不到要查找的数据,或者发生需要注意的其他问题。

#!/bin/bash

# a shell script that keeps looping until a specific exit code is given
# Start from /etc/init.d, or SupervisorD, for example. 
# It will restart itself until the script it calls returns a given exit code

nice php -q -f ./cli-worker.php -- $@
ERR=$?

# if php does an `exit(99);` ...
if [ $ERR -eq 99 ]
then
   # planned complete exit
   echo "99: PLANNED_SHUTDOWN";
   exit 0;
fi

sleep 1

# Call ourself, replacing the script without a sub-call
exec $0 $@