2017-01-09 1 views
0

Ich habe einige PHP-Dateien. Jeder von ihnen startet einen Socket-Listener oder führt eine Endlosschleife aus. Die Skripte halten, wenn über php Befehl ausgeführt werden:Wie führe ich mehrere PHP-Dateien in einer einzigen Shell-Zeile aus?

php sock_listener.php ...halt there 
php listener2.php ... halt there 
... 

Derzeit verwende ich screen Befehl alle Zuhörer zu starten Dateien PHP jedesmal, wenn die Maschine neu gestartet wird. Gibt es eine Möglichkeit, alle Listener-PHP-Dateien in einer einzigen Shell-Zeile zu starten, so dass ich ein Shell-Skript schreiben kann, um es einfacher zu verwenden?

+0

Verwenden Sie nicht 'exec' Befehl –

Antwort

1

Bildschirm Mit

erstellen abgesetztem Bildschirm-Sitzung für das erste Skript:

session='php-test' 
screen -S "$session" -d -m -t A php a.php 

wo -d -m Kombination Bildschirm eine freistehende Sitzung erstellen verursacht.

Führen Sie den Rest der Skripte in der gleichen Sitzung in separaten Fenstern:

screen -S "$session" -X screen -t B php b.php 
screen -S "$session" -X screen -t C php c.php 

wo

  • -X sendet der eingebaute inscreen Befehl an die laufende Sitzung;
  • -t legt den Fenstertitel fest.

    There is a screen on: 
        8951.php-test (Detached) 
    

    eine Verbindung zu der Sitzung mit -r Option, zB:

    screen -r 8951.php-test 
    

    Liste der Fenster im Bildschirm-Sitzung mit

Die Sitzung wird in der Ausgabe des screen -ls Befehls verfügbar sein Ctrl - a" Verknüpfung oder windowlist -b Befehl.

Forking Prozesse Hintergrund

Eine weniger bequeme Weise ist, um die Befehle in den Hintergrund zu senden, indem ein Und-Zeichen am Ende eines jeden Befehl angehängt wird:

nohup php a.php 2>a.php.err >a.php.out & 
nohup php b.php 2>b.php.err >b.php.out & 
nohup php c.php 2>c.php.err >c.php.out & 

wo

  • nohup verhindert Beendigung der Befehle, wenn der Benutzer sich aus der Shell abmeldet.Lesen Sie this tutorial für weitere Informationen;
  • 2>a.php.err leitet den Standardfehler zu a.php.err Datei um;
  • >a.php.out leitet die Standardausgabe an a.php.out Datei um.

Gibt es eine Weise, die ich alle Zuhörer PHP-Dateien in einzelne Shell-Zeile beginnen kann, so dass ich ein Shell-Skript schreiben können, um es einfacher zu bedienen?

Sie die oben genannten Befehle in ein Shell-Skript-Datei setzen, zB:

#!/bin/bash - 
# Put the commands here 

ausführbar machen:

chmod +x /path/to/script 

und es nennen, wenn Sie es brauchen:

/path/to/script 

Ändern Sie die shebang als geeignet e.

+0

Vielen Dank für Ihre detaillierten Antworten, Frage Änderung auch. – MarcusM

+0

Ich setze 2 Bildschirmbefehle in ein Shellskript und rufe sie auf, die zweite Bildschirmzeile wird nicht erreicht, weil sie bei der ersten Bildschirmsitzung stecken bleibt, ich muss Strg + A-D drücken, dann wird die zweite Bildschirmzeile gestartet. Während ich ein Shell-Skript brauche, das zwei Bildschirmsitzungen nur durch Aufruf öffnen kann, sind keine zusätzlichen Operationen erforderlich. Hast du eine Idee? Vielen Dank! – MarcusM

+0

@MarcusM sollte das Shell-Skript wie folgt aussehen (https://gist.github.com/a0044b80f280b8cd3b6cde2632ed6f58) (_three_ 'screen' Befehle). Wenn Sie es starten: './Script.sh', leitet es Sie nicht zur Bildschirmsitzung weiter, da es losgelöst ist. –

Verwandte Themen