0

我正在制作一个编码服务器,需要一点帮助

我有一个名为 upload 的目录和一个名为 videoConverter.php 的 php 文件,当它运行时它有一个循环,将转换上传目录中的所有视频文件并将完成的文件通过 FTP 传输到流媒体服务器。

脚本没有问题,但问题是一旦循环完成,它不会转换循环结束后上传的任何新文件。当文件上传到上传的目录时,我需要找到执行 php 文件或脚本。

我正在考虑使用 cron 作业并每秒运行 php 文件,但它不会在脚本已经运行时继续运行吗?

有谁知道解决这个问题的好方法?

4

2 回答 2

2

对于这样的任务,我不会坚持使用 PHP,它只是编码工具和文件本身之间的低效层——你需要一个事件驱动的工具,而不是脚本语言。

我最好查看inotify以了解上传文件夹中的本地更改,然后随时随地处理新文件。

我的第一个想法是在Node.js环境中使用inotify 包装器:

  • 每当出现新文件时,encode(newFile)都会调用它;
  • 编码过程完成后,pushToFTP(encodedFile)会触发回调并开始传输。

奖励,由于异步 js 架构,较小的文件不必等到整个工作完成。

于 2012-08-23T02:20:22.057 回答
0

你可以这样做:

  1. 脚本从 cron 唤醒,检查 'pid' 文件。
  2. 如果它找到一个 pid 文件,它会关闭
  3. 如果没有找到 pid 文件,则将其 pid 写入当前目录。
  4. 然后它开始处理视频文件。
  5. 完成后,或在必须退出的任何故障时,它会删除/取消链接 pid 文件。

现在,如果进程失败并且从不取消失败的链接,这可能会产生问题,不会运行其他作业。

您可以做的另一件事是执行引导脚本 exec('ps aux | grep VIDEO_SCRIPTNAME'); (或其他),如果您看到脚本已经在运行,请不要执行视频转换脚本。在该示例中,您将有两个文件,一个由 cron 运行并检查当前是否正在进行视频转换的引导程序,以及第二个文件,即实际执行工作的文件。

于 2012-08-23T02:08:55.053 回答