在 CRON 作业中多次调用 PHP(自调用直到满足退出条件)

发布于 2024-08-18 12:26:22 字数 479 浏览 1 评论 0原文

我计划使用计划每小时运行的 cronjob 同步来自 2 个不同服务器的 2 个文件夹。 要调度的脚本将检查先前的实例是否已在运行,如果没有,则继续处理。

因此,第一阶段是同步这些文件夹。每天(或更频繁),第二台服务器将添加 1-2 千个新文件,需要将其移至第一台服务器并进行处理。

处理将由 PHP 进行。它将打开每个文件,读取每一行并将其添加到数据库中。

我想做的是使用同步文件夹的相同 cron 来调用 PHP 脚本来解析文件。但由于我不知道处理这么多文件需要多长时间,因此我想对 PHP 在每个请求上处理的文件数量施加限制。

如果 PHP 脚本没有添加限制(文件数/每个请求),则很容易出现超时。

问题是:有没有办法可以继续循环并调用这个 PHP 脚本,直到它完成处理?理想情况下,当 wget(文件夹同步)和 PHP 都完成时,锁将被删除,以便新的 cron 实例可以运行。

有任何建议欢迎提出, 谢谢

I'm planning to sync 2 folders from 2 dyfferent servers using a cronjob scheduled to run every hour.
The script that is to be scheduled will check if a previous instance is already running, and if not, continue with processing.

so, the first stage is to sync these folders. Daily (or more often), the second server will have 1-2 thousands of new files added, that need to be moved onto the first server and processed.

The processing will be handled by PHP. it will open each file, read each row and add it to a database.

What i'd like to do is use the same cron that syncs folders to call the PHP script to parse the files. But since i don't know how long it'll take to process that many files, I'd like to impose a limit on the number of files PHP handles on each request.

If no limit is added to the PHP script (number of files / each request), it could easily reach a timeout.

The question is: is there a way i can keep looping and call this PHP script until it finishes processing? Ideally when both wget (folder sync) and PHP will finish, the lock will be removed so a new instance of the cron can run.

Any suggestion is welcomed,
thank you

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

私野 2024-08-25 12:26:22

您可以在脚本末尾放置一个 header() 并使用 GET 参数来控制执行流程。例如:

parse.php?action=1

在脚本中:


switch ($_GET["action"])
{
case 1:
 //action 1 goes here
 header("Location: ...");
 exit();
break;
case 2:
 //action 2 goes here
 header("Location: ...");
break;
}
 exit();

You can place a header() at the end of the script and use GET parameters to control the execution flow. For example:

parse.php?action=1

In script:


switch ($_GET["action"])
{
case 1:
 //action 1 goes here
 header("Location: ...");
 exit();
break;
case 2:
 //action 2 goes here
 header("Location: ...");
break;
}
 exit();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文