Я хочу получить в реальном времени вывод запущенного процесса на моем сервере.Для скрипта я сделал что-то простое в bash:
Скрипт 1 (script.sh).
#!/bin/bash
y=0;
while [ $y > 0 ]; do
y=$((y+1))
sleep 1;
echo $y
echo "I am baking pies. I have $y so far."
done
Скрипт 2 (test.sh).
#!/bin/bash
~/script.sh > /dev/null &
pid=$!
echo $pid
strace -e trace=write -s1000 -fp $pid 2>&1 \
| grep --line-buffered -o '".\+[^"]"' \
| grep --line-buffered -o '[^"]\+[^"]' \
| while read -r line; do
printf "%b " $line;
done
Роль второго скрипта состоит в том, чтобы запустить первый, получить его pid и затем отследить вывод этого pid.На стороне сервера этого должно быть достаточно, но я могу ошибаться.Тем не менее, на стороне laravel я не мог найти способ получить вывод этого сценария в реальном времени.
Laravel, используя Symfony (на примере документации Symfony: https://symfony.com/doc/current/components/process.html).
$process = new Process(['/test.sh']);
$process->run();
// executes after the command finishes
if (!$process->isSuccessful()) {
throw new ProcessFailedException($process);
}
echo $process->getOutput();
Скрипт работает почти так, как и должно быть, но есть проблема:
Когда скрипт запускается, laravel только печатает pid и не ждет вывода команды strace. Теперь есть ли способполучить реальный вывод скрипта во время его работы? Если невозможно использовать только Laravel и Symfony, могу ли я добиться этого с помощью VueJS (с которым я знаком и практиковался в последние несколько месяцев)?