【问题标题】:Apache cron: synchronous tasks executionApache cron:同步任务执行
【发布时间】:2026-02-23 09:50:01
【问题描述】:

我想创建一个聚合器,其目标是抓取 Facebook 帖子(文本、图片、视频)。下一步是在我的资源上发布抓取的信息,并在我的 youtube 频道上发布视频。我想让 cron 每 1 分钟启动一次这个聚合器。但我想,我会遇到下一个问题:如果我抓取这么大的视频文件,直到 1 分钟才能完全上传到 youtube。直到这一分钟才发生,下一个视频文件将被抓取并且也需要上传。我的问题:第二个视频文件是否会留​​在队列中并等待第一个视频文件上传,或者我需要为此创建一个多线程?如果有,请告诉我怎么做?

【问题讨论】:

    标签: php apache cron


    【解决方案1】:

    Crontab 只是在预定时间生成一个进程。如果 cron 仍在运行它 1 分钟前启动的进程,它将创建另一个进程(即同时运行 2 个进程)。

    您的代码必须确保对正在上传的文件进行标记,这样,如果/当 cron 运行第二个进程时,它不会尝试多次上传同一个文件。

    你的逻辑应该是这样的:

    • 获取数据
    • 在上传该数据之前,请检查(例如在数据库中)您是否已经在上传数据
    • 如果您尚未上传,请在数据库中标记您正在上传该数据
    • 上传数据

    说实话,这不是 cron 的一个很好的用途,你最好使用一个长时间运行的进程。像supervisord 这样的软件可以让你创建一个长时间运行的 PHP 脚本,如果它崩溃了会自动重启。

    【讨论】:

    • 感谢您的回答。但是你是什么意思:“......正在上传被标记为......”?我的英语不好。
    • 我已经澄清了一点答案