PHP выполняет скрипт bash, перенаправляет вывод в базу данных

У меня есть очередь задач, которые каждый может / займет время. Задача запускается с использованием скрипта bash и нескольких параметров. Когда пользователь запускает эту задачу, он должен иметь возможность отслеживать состояние (и, следовательно, вывод) этой задачи. Для этого вывод должен быть сохранен в базе данных, а пользовательский интерфейс извлекает текущий вывод.

Как мне лучше всего бегать fetch.sh так каждая строка вывода вставляется в базу данных, а не только когда скрипт заканчивается?

Будет ли что-то вроде этой работы?

shell_exec("./script.sh | while read -r line ; do
sqlite "insert into history (str) values ("$1");
done &> /dev/null &")

1

Решение

Возможно, что-то вроде этого будет работать для вас:

$db = new SQLite3('mydb');

if( ($fp = popen("./script.sh", "r")) ) {
while( !feof($fp) ){
$line = fread($fp, 1024);
$db->exec("insert into history (str) values ({$line})");
}
fclose($fp);
}

ОБНОВИТЬ

Как выясняется, есть относительно простой способ запустить это в фоновом режиме

Скажем, наш скрипт называется logger.php

В этом случае — мы могли бы сделать:

nohup php -q logger.php > script.log 2>&1 &
0

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

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

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