2016-03-24 4 views
1

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

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

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

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

Каким образом fetch.sh получает свои параметры/инструкции из вашего приложения? Я думаю, fetch.sh - это работа cron? Таким образом, он все равно должен запрашивать базу данных, не так ли? – Gerfried

+0

Как я называю это из моего кода сервера в PHP, действительно ли это имеет значение? Я извлекаю параметры в PHP и передаю их. – Niels

ответ

0

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

$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); 
} 

UPDATE

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

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

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

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

Выглядит хорошо! Любая идея, как я буду делать это без блокировки для пользователя? – Niels

+0

PHP вряд ли может быть суперзвездой, когда дело доходит до неблокирующих скриптов, микросервисов и т. Д. Возможно, вы можете попробовать http://reactphp.org/. Эта вещь должна позволить вам создать фоновый сервер, который выполнит эту работу. Я думаю, вы могли бы также рассмотреть возможность написания своего сервиса с помощью nodejs. –

+0

Также ознакомьтесь с этой статьей http://kvz.io/blog/2009/01/09/create-daemons-in-php/ –