shell Befehl gibt fortlaufend zeilenweise Output aus - wie auslesen?

Paula

Erfahrenes Mitglied
Hallo zusammen,

ich habe einen Befehl für die Shell, der mir fortlaufend einen zeilenweisen Output bringt. Sprich bestimmte Werte werden mir so mitgeteilt. Ich möchte diese nun in eine Datenbank speichern und es per PHP realisieren.

Nun habe ich jedoch ein Problem:
PHP:
$outout = shell_exec($cmd);
Dadurch läuft PHP solange durch, bis mein Befehl fertig ist - also nie. Gibt es dafür eine Lösung?

Oder alternativ kann ich den Output auch per "> foo.txt" in eine Datei schreiben, aber auch hier läuft mein Befehl ewig durch. Wie kann ich den Befehl nach x Sekunden oder ähnliches abbrechen?


Danke und Gruß
 
Mit einer Shellsteuerung über PHP habe ich mich noch nicht befasst, aber ich bin vor einiger Zeit mal über eine nette Seite zum Thema "PHP" (Link zum Thema "Multiprozedurale Abhandlung") gestolpert. Hier auch um Überblick. Des Weiteren habe ich gerade gesehen, dass "daddz" hier einen Blogeintrag hinterlassen hat zum Thema PHP & Multitasking.
Was du, sofern das nun möglich ist, tun könntest, ist die terminierung des ersten Levels (Deine shell exec über PHP) über einen zweiten Level (nach einer bestimmten Zeit ([phpf]sleep[/phpf] oder for ($i = 0; $i < $bigint; ++$i);) - Extrem gesagt: Du killst den ersten Prozess über einen zweiten Kontrollprozess.
Das würde aber eventuell daran scheitern, dass der erste Level zwar vorhanden ist, aber die über die Shell laufenden Befehle eine komplett andere PID besitzen, oder ein komplett anderes Problem auftritt. Alternativ dazu könntest du eventuell auch eine Batch schreiben, die sich selbst terminiert, und diese dann statt der direkten Befehlssequenz aufrufen.

Habe davon wohlgemerkt keine Ahnung und hafte auch nicht für Schäden. Wäre dennoch interessant, ob mein Ansatz nicht allzu verkehrt ist ^^
 
Wenn du fortlaufend Output hast, sollte es sich um eine Fehlerausgabe handeln. Du kannst deinem Prozess mittteilen (oder besser der Shell), das alle Ausgaben auf einem bestimmten Ausgabe-Kanal getätigt werden sollen. Lies dazu: http://www.bin-bash.de/komfort.php das Kapitel über "Ausgabeumleitung". Die Ausgabe kannst du dann an eine PHP-Script leiten, das die Werte dann in deine Datenbank schreibt.
 
Danke euch, ich werde mal schauen was mir davon helfen kann.
Es ist keine Fehlerausgabe, sondern der aktuelle Status von einem Server. Z.B. ein Wert liefert die Anzahl der aktiven Benutzer.
 
Zurück