0

(我们的服务器是基于 Linux 的)

我是一位经验丰富的 PHP 开发人员,但第一次我将开发一个始终运行并获取一些数据的机器人。

我将用一个简单(和示例)场景来解释我的应用程序。我有大约 2000 个网站 url,我的应用程序将访问这个 url 并记录网页的内容。此应用程序将工作 7 天 24 小时。当它完成 2000 个网站时,它将重新开始工作。

但我需要一些关于我的服务器的建议。如您所见,我的应用程序将无限运行,直到我关闭服务器。我可以用这个做这个无限循环

while(true)
{
     APPLICATION CODES HERE
}

但我认为这对服务器来说是个祸害 :) 有可能在服务器端做这样的事情吗?

我也认为使用cronjobs但它不适用于我的场景。因为我的脚本尽快重新开始工作,所以它完成了工作。我必须“完成工作后重新开始”,而不是“每 30 分钟开始一次”。因为我不知道,也许获取所有 2000 个网站需要 30 多分钟或不到 30 分钟。

我希望我解释得很好。

我也担心内存使用情况。如您所知,垃圾收集器会在每次 PHP 脚本停止后清理内存。但正如我所说,我的应用程序不会停止几天(也许几周)。所以垃圾收集器不会被触发。我在脚本末尾手动取消设置( unset() 函数)所有使用的变量。够了吗?

我需要服务器管理员的一些建议 :)

PS。我将其开发为控制台应用程序,而不是 Web 应用程序。我可以从命令行执行它。

4

2 回答 2

0

批处理..将所有站点存储在csv或其他文件中,完成后标记它们,然后处理所有未标记的站点,然后处理所有标记的..等等。一次只说1或5个,启动每分钟来自 cron 的批处理脚本..

甚至不要尝试一次处理所有这些错误。任何错误,您都不会知道发生了什么。

甚至可以将作业存储在数据库中,存储处理统计信息等。允许微调和更好的报告。

您可能会遇到时间限制来尝试运行无限的 php 脚本,即使是从命令行也是如此。您的服务器管理员也会讨厌您。如果您没有正确释放资源,可能会遇到内存限制.. 用 php 很容易完成。

阅读:http ://www.ibm.com/developerworks/opensource/library/os-php-batch/

于 2013-03-31T20:41:44.300 回答
0

您的脚本可以只在列表中运行一次并退出。这样,可以释放 php 所持有的任何资源。

然后有一个shell脚本在无限循环中调用php脚本。

由于 php 不是为长时间运行的任务而设计的,我不确定垃圾收集是否可以完成任务。每次运行后退出将迫使它释放所有内容。

于 2013-04-01T00:59:56.850 回答