如何可靠地运行一个使用cron作业触发的运行时间较长的PHP脚本

xuo3flqw  于 2023-03-28  发布在  PHP
关注(0)|答案(1)|浏览(177)

我想在竞争对手的网站上抓取3,000个URL以获取价格值。我不想让他们的服务器过载或触发任何防火墙,因此第一个基本措施是在一周内传播这3,000个请求。
我的代码设置如下:

set_time_limit(0);

foreach ($links as $link) {

    // crawl price from link

    // save price to database

    // 200 second delay before next crawl
    sleep(200);

}

我使用每周午夜运行的cron作业触发此脚本。
set_time_limit(0)行应该覆盖max-execution time,但是我读到过由cron-job触发的脚本不受标准执行时间限制。
问题是,要让这个脚本运行一个星期,我假设服务器必须完全稳定,没有停机时间,否则爬网会失败。
我如何确保这一点,并在有停机时间的情况下,然后重新启动爬网自动从它失败的点?是一个星期太长的脚本运行?否则,我可以压缩到几个小时,但仍然,有足够的时间有脚本被中断,我感兴趣的情况下,它被中断,如何处理这一点,并完成脚本.

e5nszbig

e5nszbig1#

除非在php.ini中设置一个,否则在使用CLI时没有运行CRON时的max_execution_time。
此外,如果你是爬行每个网址只有一次,和网址的都是不同的(而不是200都在同一个网站)然后等待之间的每一个单独的爬行是没有必要的,因为网址的没有链接或相互交谈
如果你想重新启动一个脚本,那么你所需要做的就是在一个文件或数据库中写一个“我到达的地方”。然后每当脚本启动时,它都会检查一个重新启动点并从那里开始。记住在脚本完成时删除重新启动文件/db,这样下次你运行脚本时它会再次从第一个URL开始。

相关问题