Kann ein Server gleichzeitig Shell-Befehle verarbeiten?

11

Ich schreibe einen sehr einfachen browserbasierten MP3- Player in PHP . Ein Teil dieses Projekts erfordert, dass jede MP3-Datei in eine WAV- Datei konvertiert wird . In PHP gibt es eine Funktion namens shell_exec, mit der Sie einen Befehl über die Shell ausführen können. Für mein Projekt wird der folgende Befehl ausgeführt, wenn jemand ein Lied in sein Konto hochlädt:

shell_exec('ffmpeg -i inputSong.mp3 outputSong.wav')

Nehmen wir also an, es gibt 10 verschiedene Personen, die das Hochladen eines Songs genau zur gleichen Zeit beenden . Führt der Linux-Server 10 Shell-Befehle gleichzeitig aus oder führt er jeweils nur einen aus?

Wenn ein Server mehrere Shell-Befehle gleichzeitig verarbeiten kann, kann der Server dann 10 verschiedene Songs gleichzeitig konvertieren oder führt er jeweils nur einen aus?

user784637
quelle
Wie hängt dieses Ubuntu zusammen? Gehört es nicht zu Serverfault oder Unix?
Bitmaske
5
Seien Sie sehr vorsichtig, wenn Sie den eingegebenen Dateinamen vom Benutzer akzeptieren. Jemand könnte speziell einen Dateinamen erstellen, der einen Befehl nachahmt und den Sie ausführen würden, und Sie würden im Wesentlichen gehackt.
Rory

Antworten:

13

Wenn Sie dies über PHP (oder eine andere Sprache, die Zugriff auf Shell-Befehle hat) ausführen, werden diese separat ausgeführt. Dies bedeutet, dass sie gleichzeitig ausgeführt werden, wenn die 10 Benutzer zufällig gleichzeitig das PHP-Skript verwenden. Jeder PHP-Aufruf shell_execerfolgt unabhängig von den anderen. Ich selbst habe ein shell_execSkript, das meinen Benutzern einige Informationen für bestimmte Bilder anzeigt, und dies erfolgt unabhängig von anderen von PHP ausgeführten Skripten shell_exec.

Die Anzahl der gleichzeitigen Benutzer, die PHP verarbeiten kann, ist begrenzt. Dies hängt jedoch von Ihrem Webserver, der PHP-Konfigurationsdatei und MySQL ab, wenn Sie es verwenden. Ich weiß, dass die Anzahl gleichzeitig größer als 100 ist.

Wenn Sie CPU-intensive Befehle verwenden, z. B. Videos konvertieren, hängt die effektive Verwendung der Befehle davon ab, wie viel RAM Sie haben und wie viel CPU-Leistung Sie haben. Für jemanden mit 64 MB RAM und einem 80486 wäre es schlecht zu versuchen, zwei Videos und 10 Songs zu konvertieren. Das würde das System überlasten. Für jemanden mit einem Core 2 Duo-Server und 4 GB RAM wäre das Konvertieren mehrerer Songs ein Kinderspiel.

Grundsätzlich kann Linux also mehrere Shell-Befehle gleichzeitig verarbeiten, insbesondere von PHP aus. Die Gesamtleistung hängt jedoch von den Ressourcen des Servers ab (CPU, RAM, Festplatte usw.).

Luis Alvarado
quelle
6

Wenn Sie eine große Anzahl von Benutzern unterstützen würden, müssten Sie eine alternative Methode zur Abwicklung des Konvertierungsprozesses untersuchen.

Beispielsweise würden Sie wahrscheinlich ein Jobplanungssystem so einrichten, dass Sie Anforderungen an das System senden, um eine Datei zu konvertieren und das System auf den Abschlussstatus abzufragen. Das Planungssystem würde Aufgaben aus einer Warteschlange übernehmen und beispielsweise bis zu vier Dateikonvertierungen gleichzeitig durchführen.

Diese Frage könnte von Interesse sein:

/programming//q/265073/175849

Steve-o
quelle
Eine weitere gute Antwort, danke steve-o
user784637