2016-03-24 6 views
1

Ich habe Warteschlange von Aufgaben, die jeder eine Weile dauern kann/wird. Die Aufgabe wird mit einem Bash-Skript und einigen Parametern ausgeführt. Wenn der Benutzer diese Aufgabe auslöst, sollte er in der Lage sein, den Status (und somit die Ausgabe) dieser Aufgabe zu überwachen. Dazu sollte die Ausgabe in einer Datenbank gespeichert werden und die Benutzeroberfläche holt die aktuelle Ausgabe.PHP führt Bash-Skript, umleiten Ausgabe an die Datenbank

Wie kann ich am besten laufen fetch.sh so dass jede Zeile der Ausgabe in die Datenbank eingefügt wird, und nicht nur, wenn das Skript beendet ist?

Würde so etwas funktionieren?

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

Wie erhält fetch.sh seine Parameter/Anweisungen von Ihrer Anwendung? Ich denke, fetch.sh ist ein Cron Job? Also muss er die Datenbank trotzdem abfragen, oder? – Gerfried

+0

Wie ich es aus meinem Server-Code in PHP nennen, ist es wirklich wichtig? Ich erhalte die Parameter in PHP und gebe sie dann weiter. – Niels

Antwort

0

Vielleicht so etwas für Sie arbeiten würde:

$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

Wie sich herausstellt - es ist eine relativ einfache Möglichkeit, dies in einem Hintergrund

Say laufen , unser Skript heißt logger.php

In diesem Fall - wir könnten tun:

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

Sieht gut aus! Irgendeine Idee, wie ich diese Blockierung für den Benutzer machen würde? – Niels

+0

PHP kann kaum ein Superstar sein, wenn es um nicht-blockierende Skripte, Microservices etc. geht. Sie könnten wahrscheinlich http://reactphp.org/ einen Versuch geben. Diese Sache sollte Ihnen erlauben, einen Hintergrund-laufenden Server zu schaffen, der die Arbeit erledigen würde. Ich denke, Sie könnten auch in Betracht ziehen, Ihren Dienst mit nodejs zu schreiben. –

+0

Überprüfen Sie auch diesen Artikel http://kvz.io/blog/2009/01/09/create-daemons-in-php/ –