Как я могу получить ход выполнения rsync с помощью команды php exec

У меня есть сценарий оболочки (rsync.sh) с командой rsync:

rsync -rtlv ​​—password-file = / путь / к / паролю / файлу / file.txt —bwlimit = 5000 / local / root / path / $ 1 имя пользователя @ remoteserver :: remote / root / path / $ 2

Затем я запускаю это из PHP (rsync.php) с помощью команды exec:

exec (‘/ path / to / shell / script / rsync.sh локальный / определенный / путь / удаленный / определенный / путь /’, $ progress, $ errors);

Это все отлично работает. Я получаю прогресс, как только он закончен, и я анализирую его. До сих пор я тестировал только несколько небольших файлов. Однако, как только это будет запущено в производство, я ожидаю, что это будет сделано на нескольких больших файлах, на завершение которых уйдет более часа. Я хотел бы иметь возможность видеть прогресс, как это происходит. Если я поставлю там флаг —progress, я не уверен, как именно я получу прогресс через exec. Есть идеи?

Я думаю, что мне придется сделать exec асинхронным и каким-то образом отправить прогресс в базу данных, где он может быть собран и отображен.

0

Решение

Ты не можешь PHP exec() Функция не возвращается, пока команда не завершится.

Это на самом деле не очень хорошая задача для PHP — веб-серверы, как правило, плохо справляются со сценариями PHP (и, следовательно, веб-запросами), выполнение которых занимает часы. Это, как говорится, вы сможете получить ближе к предполагаемому поведению, используя proc_open() семейство функций, которые позволяют запускать процесс, который запускается параллельно с PHP-скриптом.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]