Как запустить файл PHP, когда файлы существуют в каталоге - Encoding Server
Я делаю сервер кодирования и мне нужна небольшая помощь
У меня есть каталог с именем uploaded и php-файл с именем videoConverter.php, и когда он запускается, он имеет цикл, который преобразует все видеофайлы в загруженном каталоге и передает по FTP завершенный файл на сервер потоковой передачи.
Сценарий не вызывает проблем, но проблема в том, что после завершения цикла он не будет преобразовывать новые файлы, загруженные после окончания цикла. Мне нужно найти, чтобы выполнить php-файл или скрипт, когда файлы загружаются в загруженный каталог.
Я думал об использовании задания cron и запуске php-файла каждую секунду, но продолжит ли он запускать скрипт, пока он уже запущен?
Кто-нибудь знает хороший способ подойти к этому вопросу?
2 ответа
Я не стал бы придерживаться PHP для такой задачи, это был бы просто неэффективный слой между инструментами кодирования и самими файлами - вам нужен инструмент, управляемый событиями, а не язык сценариев.
Я бы лучше посмотрел на inotify для локальных изменений в папках загрузки, а затем обработал новые файлы на ходу.
Первым делом я бы использовал оболочку inotify в среде Node.js:
- всякий раз, когда появляется новый файл,
encode(newFile)
называется; - когда процесс кодирования закончен,
pushToFTP(encodedFile)
обратный вызов срабатывает и начинается передача.
Кроме того, файлы меньшего размера не должны ждать завершения всей работы благодаря асинхронной архитектуре js.
Вы могли бы сделать:
- Скрипт просыпается из cron, проверяет файл 'pid'.
- Если он находит файл pid, он выключается
- Если он не находит файл pid, он записывает свой pid в текущий каталог.
- Затем он начинает обрабатывать видеофайл.
- По завершении или при любом сбое, когда он должен завершиться, он удаляет / отменяет связь файла pid.
Теперь это может создать проблему, если процесс завершится неудачно и никогда не отменяет связь с ошибкой, другие задания не будут выполняться.
Другая вещь, которую вы могли бы сделать - это запустить скрипт начальной загрузки exec('ps aux | grep VIDEO_SCRIPTNAME'); (или что-то в этом роде), и если вы видите, что скрипт уже запущен, не выполняйте скрипт конвертации видео. В этом примере у вас будет два файла: загрузчик, который запускается cron и проверяет, происходит ли преобразование видео в данный момент, и второй файл, который действительно выполняет свою работу.