Bermuda
Новичок
Запуск только одной копии скрипта
В кроне каждые 5 минут запланирован запуск скрипта конвертирующего видео залитое пользователем через web. Скрипт вызывает через exec энкодер ffmpeg который конвертирует новые относительно последнего запуска файлы с видео. В зависимости от количества видео время его конвертации будет разным и может превышать интервал в 5 минут. Тем не менее крон запустит еще одну копию скрипта, что недопустимо.
Очевидно, что можно оставлять метку "я живой" в (файле/базе данных) с информацией о последнем времени активности скрипта. Если эта метка устарела, то следовательно нет ни одной запущенной копии скрипта. Однако процесс конвертации видео с точки зрения скрипта атомарен и скрипт не получит контроль до тех пор, пока ffmpeg не закончит свою работу. Так как конвертация больших файлов видео (100-200 M) может занимать продолжительное время, то скрипт вследствие невозможности обновить метку "я живой" не будет обнаружен как запущенный и крон запустит его копию, которая в свою очередь также примется конвертировать видео, что приведет к уменьшению скорости (увеличению времени) кодирования в два раза, что в свою очередь приведет к запуску еще одной копии скрипта и т. д. то тех пор пока сервер не помрет. Конечно можно fork-нуть процесс кодирования и потом в цикле ждать сигнала о завершении от child-а, но мне кажется, что это как-то сложно. Должно быть более простое решение.
Каким образом можно проконтролировать что, одна копия скрипта уже запущена и тем замым предотвратить запуск второй копии скрипта? Где-то уже наверняка обсуждалось, но я ума не приложу по каким словам искать. Буду премного благодарен за ссылку на обсуждение решений.
В кроне каждые 5 минут запланирован запуск скрипта конвертирующего видео залитое пользователем через web. Скрипт вызывает через exec энкодер ffmpeg который конвертирует новые относительно последнего запуска файлы с видео. В зависимости от количества видео время его конвертации будет разным и может превышать интервал в 5 минут. Тем не менее крон запустит еще одну копию скрипта, что недопустимо.
Очевидно, что можно оставлять метку "я живой" в (файле/базе данных) с информацией о последнем времени активности скрипта. Если эта метка устарела, то следовательно нет ни одной запущенной копии скрипта. Однако процесс конвертации видео с точки зрения скрипта атомарен и скрипт не получит контроль до тех пор, пока ffmpeg не закончит свою работу. Так как конвертация больших файлов видео (100-200 M) может занимать продолжительное время, то скрипт вследствие невозможности обновить метку "я живой" не будет обнаружен как запущенный и крон запустит его копию, которая в свою очередь также примется конвертировать видео, что приведет к уменьшению скорости (увеличению времени) кодирования в два раза, что в свою очередь приведет к запуску еще одной копии скрипта и т. д. то тех пор пока сервер не помрет. Конечно можно fork-нуть процесс кодирования и потом в цикле ждать сигнала о завершении от child-а, но мне кажется, что это как-то сложно. Должно быть более простое решение.
Каким образом можно проконтролировать что, одна копия скрипта уже запущена и тем замым предотвратить запуск второй копии скрипта? Где-то уже наверняка обсуждалось, но я ума не приложу по каким словам искать. Буду премного благодарен за ссылку на обсуждение решений.