php Programme ausführen funktioniert nicht

Gast #6517627
Lesenswert?

Hallo zusammen,
ich hab mir folgendes php Skript angelegt:

<?php
shell_exec("killall ffmpeg &");
sleep (4);
shell_exec("Xvfb :99 &");
sleep (4);
shell_exec("export DISPLAY=:99");
sleep (4);
shell_exec("su -c 'DISPLAY=:99 chromium 
https://studio.youtube.com/channel/meinphpkanal/livestreaming'; - andreas 
&");
sleep (120);
shell_exec("ffmpeg -f lavfi -i anullsrc -rtsp_transport tcp -i 
rtsp://benutzername:passwort@192.168.2.5:554/ch2/2 -tune zerolatency 
-vcodec libx264 -pix_fmt + -c:v copy -c:a aac -strict experimental -f 
flv rtmp://a.rtmp.youtube.com/live2/youtube.key -nostdin -nostats &");
sleep (120);
shell_exec("killall Xvfb &");

?>

1) ffmpeg soll beendet werden
2) virtuelle Grafikkarte soll gestartet werden.
3) chromium soll in der virtuellen Grafikkarte gestartet werden.
Als root geht es nicht, daher als der User andreas
4) ffmpeg baut eine Verbindung zu youtube auf
5) Die virtuelle Grafikkarte soll wieder beendet werden.

ps -ax ergibt:
 1221 pts/0    S      0:00 php test.php
 1226 pts/0    Z      0:00 [sh] <defunct>
 1227 pts/0    S      0:00 Xvfb :99

[sh] <defunct>

Wenn ich die Befehle als Bashskript ausführe, funktioniert es zu 100%, 
weshalb aber nicht in php?
Gast #6517670
Lesenswert?

Brrr warum muss das in PHP sein ?

1. Dir fehlt oben eine Zeile #!/.../php
2. Ausführungszeit ist über 30sec (Default Einstellungen vom PHP)
2. Wenn ich mich recht erinnre kann Shell_exec nur einen Parameter für 
mehr muss man noch etwas mehr machen.
#6517685
Lesenswert?

Sandfrog schrieb:
> Brrr warum muss das in PHP sein

+1.

Schreib das ganze als ein (1) Shellscript. Wenn dann PHP dazu muss, 
ruf aus PHP heraus das eine Script auf.

Sowas
> shell_exec("export DISPLAY=:99");

geht in PHP nicht. Hast ja schon gemerkt...
PHP startet eine shell, die shell setzt eine Variable, die Shell beendet 
sich wieder, die Variable verschwindet im Nirvana, PHP führt die nächste 
Anweisung aus...
Also:
1
#!/bin/bash
2
killall ffmpeg  # Kein '&' dahinter. Das Script soll erst weiterlaufen, wenn der killall-Befehl ausgeführt wurde.
3
export DISPLAY=:99
4
Xvfb $DISPLAY &
5
sleep 4
6
chromium .... & # evtl. über phantomjs o.Ä. nachdenken.
7
...
#6519981
Lesenswert?

quotendepp schrieb:
> ähm, darf man fragen wozu? starte das bashscript doch einfach direkt und
> spar dir den umweg...

Die Wahl von php liegt evtl. in dem Teil des Codes begründet den er 
nicht zeigt.
Möglicherweise hat er irgendwo einen Server laufen und sendet diesem 
Kommandos (per http POST, TCP/IP oder whatever) und will dadurch 
Aktionen, z.B. das Abspielen eines Videos triggern.

Witzigerweise habe ich sowas vor 2 Wochen auch mal gemacht.
Hab es komplett in Python umgesetzt.
Das Socket-Handling und Parsen der Kommandos könnte man natürlich auch 
in reinem bash machen, ich könnte mir aber auch nen rostigen Nagel ins 
Knie hauen.
Gast #6520082
Lesenswert?

Hallo,
es ging um das Anlegen eines youtube Livestream, das automatisiert 
werden sollte, daher folgender Ablauf:

1) Prüfen ob der Livestream vorhanden ist
2) Prüfen ob eine Internetverbindung vorhanden ist

Ist kein Livestream mehr vorhanden, aber die Internetverbindung ist 
nicht oder nicht mehr unterbrochen, macht es dann folgendes im bash 
Skript:

3) ffmpeg beenden, falls es noch läuft
4) virtuelle Grafikkarte starten
5) chrome in der virtuellen Grafikkarte starten mit der Startseite, wo 
man einen youtube Livestream anlegt.
6) 120 Sek warten
7) ffmpeg starten, der den rtsp Stream der Kamera an youtube schickt.
8) Die virtuelle Grafikkarte beenden, was auch chrome beendet.

Nun wird das bash skript beendet und mein basic Programm prüft wieder 
1+2.
Wird der livestream beendet, oder die Internetverbindung ist weg, wird 
wieder das bash Skript ausgeführt.

Das ganze funktioniert jetzt sehr stabil.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren