Как запустить файл PHP, когда файлы существуют в каталоге - Encoding Server

Я делаю сервер кодирования и мне нужна небольшая помощь

У меня есть каталог с именем uploaded и php-файл с именем videoConverter.php, и когда он запускается, он имеет цикл, который преобразует все видеофайлы в загруженном каталоге и передает по FTP завершенный файл на сервер потоковой передачи.

Сценарий не вызывает проблем, но проблема в том, что после завершения цикла он не будет преобразовывать новые файлы, загруженные после окончания цикла. Мне нужно найти, чтобы выполнить php-файл или скрипт, когда файлы загружаются в загруженный каталог.

Я думал об использовании задания cron и запуске php-файла каждую секунду, но продолжит ли он запускать скрипт, пока он уже запущен?

Кто-нибудь знает хороший способ подойти к этому вопросу?

2 ответа

Решение

Я не стал бы придерживаться PHP для такой задачи, это был бы просто неэффективный слой между инструментами кодирования и самими файлами - вам нужен инструмент, управляемый событиями, а не язык сценариев.

Я бы лучше посмотрел на inotify для локальных изменений в папках загрузки, а затем обработал новые файлы на ходу.

Первым делом я бы использовал оболочку inotify в среде Node.js:

  • всякий раз, когда появляется новый файл, encode(newFile) называется;
  • когда процесс кодирования закончен, pushToFTP(encodedFile) обратный вызов срабатывает и начинается передача.

Кроме того, файлы меньшего размера не должны ждать завершения всей работы благодаря асинхронной архитектуре js.

Вы могли бы сделать:

  1. Скрипт просыпается из cron, проверяет файл 'pid'.
  2. Если он находит файл pid, он выключается
  3. Если он не находит файл pid, он записывает свой pid в текущий каталог.
  4. Затем он начинает обрабатывать видеофайл.
  5. По завершении или при любом сбое, когда он должен завершиться, он удаляет / отменяет связь файла pid.

Теперь это может создать проблему, если процесс завершится неудачно и никогда не отменяет связь с ошибкой, другие задания не будут выполняться.

Другая вещь, которую вы могли бы сделать - это запустить скрипт начальной загрузки exec('ps aux | grep VIDEO_SCRIPTNAME'); (или что-то в этом роде), и если вы видите, что скрипт уже запущен, не выполняйте скрипт конвертации видео. В этом примере у вас будет два файла: загрузчик, который запускается cron и проверяет, происходит ли преобразование видео в данный момент, и второй файл, который действительно выполняет свою работу.

Другие вопросы по тегам