У меня есть очередь задач, которые каждый может / займет время. Задача запускается с использованием скрипта bash и нескольких параметров. Когда пользователь запускает эту задачу, он должен иметь возможность отслеживать состояние (и, следовательно, вывод) этой задачи. Для этого вывод должен быть сохранен в базе данных, а пользовательский интерфейс извлекает текущий вывод.
Как мне лучше всего бегать fetch.sh
так каждая строка вывода вставляется в базу данных, а не только когда скрипт заканчивается?
Будет ли что-то вроде этой работы?
shell_exec("./script.sh | while read -r line ; do
sqlite "insert into history (str) values ("$1");
done &> /dev/null &")
Возможно, что-то вроде этого будет работать для вас:
$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 &
Других решений пока нет …