Я не так хорош в серверных командах, поэтому не могу вам помочь. Но у меня есть эта ловкость для выяснения вещей.
Итак, я вижу несколько способов сделать это, по сути, вам нужен PHP, чтобы что-то делать, когда завершается вызов командной строки. Очевидный ответ - убрать &
с конца команды и сделать его блокирующим, чтобы PHP продолжал показывать, что работа выполнена. Но при этом вы не сможете вернуться к конечному пользователю, пока это не будет сделано.
Вариант 1
Поэтому одним из способов является создание своего рода PHP-скрипта Bootstrap, который вы называете неблокирующим. В этом сценарии выполните команду преобразования, которая теперь блокируется, и после этого вернитесь, чтобы PHP сделал что-то еще.
//bootstrap.php
shell_exec('ffmpeg -i file.webm -c:v libx264 -c:a aac -strict -2 file.mp4 > MYFILE.txt 2>/dev/null'); //blocking
//Update the DB
Затем с вашего контроллера или как вы называете бутстрап неблокирующим
shell_exec('php {pathto}/bootstrap.php 2>/dev/null &');
Таким образом, вызов к загрузчику возвращается немедленно, но вызов преобразования блокируется, что дает вам возможность обновить послесловия БД.
Вариант 2
Поскольку преобразование выводит файл, вы можете запустить отдельное фоновое задание, которое отслеживает измененное время выходного файла. Тогда, если измененное время было как минута в прошлом, вы можете предположить, что оно завершило преобразование и обновить БД. Измененное время должно продолжать обновляться до тех пор, пока в файл добавляются данные.
Надеюсь, это поможет.
PS. У меня есть код, который может пригодиться на GitHub
Запускает фоновые процессы в Windows и Linux
https://github.com/ArtisticPhoenix/MISC/blob/master/BgProcess.php
Блокировка процесса PHP (симуляция мьютекса с использованием файлов)
https://github.com/ArtisticPhoenix/MISC/blob/master/ProcLock.php
Отображение аргументов командной строки для программ PHP:
https://github.com/ArtisticPhoenix/Cli
Вы можете использовать их, если это поможет вам.