Un serveur peut-il gérer des commandes shell simultanées?

11

J'écris un lecteur MP3 basé sur un navigateur très simple en PHP . Une partie de ce projet nécessite que chaque fichier MP3 soit converti en fichier WAV . Il y a une fonction en PHP appelée shell_execqui vous permet d'exécuter une commande via le shell. Pour mon projet, chaque fois que quelqu'un télécharge une chanson sur son compte, la commande suivante est exécutée:

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

Disons donc qu'il y a 10 personnes différentes qui finissent de télécharger une chanson en même temps. Le serveur Linux exécute-t-il 10 commandes shell simultanément ou n'en exécute-t-il qu'une à la fois?

Si un serveur peut gérer plusieurs commandes shell simultanément, le serveur pourrait-il gérer la conversion de 10 chansons différentes en même temps ou n'en fait-il qu'une seule à la fois?

user784637
la source
Quel est le lien entre cet ubuntu? N'appartient-il pas à serverfault ou à unix?
bitmask
5
Soyez très prudent lorsque vous acceptez le nom de fichier d'entrée de l'utilisateur. Quelqu'un pourrait spécialement créer un nom de fichier qui imite une commande, et que vous exécuteriez, et vous seriez essentiellement piraté.
Rory

Réponses:

13

Si vous le faites via PHP (ou tout autre langage ayant accès aux commandes shell), elles seront effectuées séparément, ce qui signifie qu'elles seront effectuées simultanément si par hasard les 10 utilisateurs utilisent le script PHP en même temps. Chaque appel PHP shell_execsera effectué indépendamment des autres. J'ai moi-même un shell_execscript qui montre certaines informations à mes utilisateurs pour certaines images et cela se fait indépendamment des autres scripts PHP exécutés shell_exec.

Il y a une limite au nombre d'utilisateurs simultanés que PHP peut gérer, mais cela dépend de votre serveur Web, du fichier de configuration PHP et de MySQL si vous l'utilisez. Je sais que le nombre est supérieur à 100 en même temps.

Lorsque vous utilisez des commandes gourmandes en CPU, par exemple en convertissant des vidéos, l'utilisation efficace des commandes dépendra alors de la quantité de RAM dont vous disposez et de la puissance du CPU dont vous disposez. Pour quelqu'un avec 64 Mo de RAM et un 80486, ce serait mal d'essayer de convertir deux vidéos et 10 chansons. Cela surchargerait le système. Pour quelqu'un avec un serveur Core 2 Duo et 4 Go de RAM, je pense que la conversion de plusieurs chansons serait un jeu d'enfant.

Donc, fondamentalement, oui, Linux peut gérer plusieurs commandes shell simultanées, spécialement à partir de PHP, mais les performances globales dépendraient des ressources du serveur (CPU, RAM, disque dur, etc.)

Luis Alvarado
la source
6

Si vous deviez prendre en charge un grand nombre d'utilisateurs, vous devrez rechercher une autre méthode pour gérer le processus de conversion.

Par exemple, vous configurerez probablement un système de planification des travaux de telle sorte que vous publiez des demandes sur le système pour convertir un fichier et interroger le système pour le statut d'achèvement. Le système de planification prendrait des tâches dans une file d'attente et dirait d'effectuer jusqu'à quatre conversions de fichiers à la fois.

Cette question pourrait être intéressante:

/programming//q/265073/175849

Steve-o
la source
Une autre excellente réponse, merci steve-o
user784637