Un server può gestire comandi shell simultanei?


11

Sto scrivendo un semplice lettore MP3 basato su browser in PHP . Parte di questo progetto richiede che ogni file MP3 sia convertito in un file WAV . C'è una funzione chiamata in PHP shell_execche ti permette di eseguire un comando tramite la shell. Per il mio progetto, ogni volta che qualcuno carica un brano nel proprio account, viene eseguito il seguente comando:

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

Quindi supponiamo che ci siano 10 persone diverse che finiscono di caricare un brano nello stesso momento esatto. Il server Linux esegue 10 comandi shell contemporaneamente o ne esegue uno solo alla volta?

Se un server è in grado di gestire più comandi shell contemporaneamente, sarebbe in grado di gestire la conversione di 10 brani diversi contemporaneamente o ne fa uno solo alla volta?


Come è correlato questo ubuntu? Non appartiene a serverfault o unix?
maschera di bit

5
Fare molta attenzione ad accettare il nome file di input dall'utente. Qualcuno potrebbe creare appositamente un nome file che imiti un comando, che tu eseguiresti e che verrai sostanzialmente violato.
Rory,

Risposte:


13

Se lo stai facendo tramite PHP (o qualsiasi altra lingua che ha accesso ai comandi della shell) verranno eseguiti separatamente, il che significa che verranno eseguiti simultaneamente se per caso i 10 utenti utilizzano lo script PHP contemporaneamente. Ogni chiamata PHP shell_execsarà effettuata indipendentemente dalle altre. Io stesso ho uno shell_execscript che mostra alcune informazioni ai miei utenti per determinate immagini e questo viene fatto indipendentemente da altri script PHP eseguiti attraverso shell_exec.

Esiste un limite al numero di utenti simultanei che PHP può gestire, ma dipende dal tuo server web, dal file di configurazione PHP e da MySQL se lo stai utilizzando. So che il numero è maggiore di 100 contemporaneamente.

Quando si utilizzano comandi a uso intensivo di CPU, ad esempio la conversione di video, l'uso efficace dei comandi dipende quindi dalla quantità di RAM disponibile e dalla potenza della CPU. Per qualcuno con 64 MB di RAM e un 80486 andrebbe male provare a convertire due video e 10 brani. Ciò sovraccaricherebbe il sistema. Per qualcuno con un server Core 2 Duo e 4 GB di RAM, penso che convertire diverse canzoni sarebbe un gioco da ragazzi.

Quindi sostanzialmente, sì, Linux può gestire più comandi shell simultanei, specialmente da PHP, ma le prestazioni complessive dipenderanno dalle risorse del server (CPU, RAM, disco rigido, ecc.)


6

Se dovessi supportare un gran numero di utenti, dovresti studiare un metodo alternativo per gestire il processo di conversione.

Ad esempio, è probabile che si configuri un sistema di pianificazione dei lavori in modo tale da inviare richieste al sistema per convertire un file e eseguire il polling del sistema per lo stato di completamento. Il sistema di pianificazione prenderebbe le attività da una coda e direbbe di eseguire fino a quattro conversioni di file alla volta.

Questa domanda potrebbe essere interessante:

/programming//q/265073/175849


Un'altra grande risposta, grazie steve-o
user784637
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.