¿Puede un servidor manejar comandos de shell simultáneos?

11

Estoy escribiendo un reproductor de MP3 basado en navegador muy simple en PHP . Parte de este proyecto requiere que cada archivo MP3 se convierta en un archivo WAV . Hay una función en PHP llamada shell_execque le permite ejecutar un comando a través del shell. Para mi proyecto, cada vez que alguien carga una canción en su cuenta, se ejecuta el siguiente comando:

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

Entonces, digamos que hay 10 personas diferentes que terminan de cargar una canción al mismo tiempo exacto. ¿El servidor Linux ejecuta 10 comandos de shell simultáneamente o solo hace uno a la vez?

Si un servidor puede manejar múltiples comandos de shell simultáneamente, ¿sería capaz de manejar la conversión de 10 canciones diferentes al mismo tiempo o solo hace una a la vez?

usuario784637
fuente
¿Cómo se relaciona este ubuntu? ¿No pertenece a serverfault o unix?
máscara de bits
55
Tenga mucho cuidado al aceptar el nombre de archivo de entrada del usuario. Alguien podría crear especialmente un nombre de archivo que imite algún comando, y que ejecute, y esencialmente sea pirateado.
Rory

Respuestas:

13

Si lo hace a través de PHP (o cualquier otro lenguaje que tenga acceso a comandos de shell), se realizarán por separado, lo que significa que se realizarán simultáneamente si por casualidad los 10 usuarios usan el script PHP al mismo tiempo. Cada llamada a través de PHP shell_execse realizará independientemente de las demás. Yo mismo tengo un shell_execscript que muestra cierta información a mis usuarios para ciertas imágenes y esto se hace independientemente de otros scripts ejecutados por PHP shell_exec.

Existe un límite para la cantidad de usuarios simultáneos que PHP puede manejar, pero depende de su servidor web, archivo de configuración de PHP y MySQL si lo está utilizando. Sé que el número es mayor que 100 al mismo tiempo.

Cuando se utilizan comandos intensivos de CPU, por ejemplo, la conversión de videos, el uso efectivo de los comandos dependerá de la cantidad de RAM que tenga y la cantidad de energía de CPU que tenga. Para alguien con 64 MB de RAM y un 80486 , sería malo intentar convertir dos videos y 10 canciones. Eso sobrecargaría el sistema. Para alguien con un servidor Core 2 Duo y 4 GB de RAM, creo que convertir varias canciones sería pan comido.

Básicamente, sí, Linux puede manejar múltiples comandos de shell simultáneos, especialmente desde PHP, pero el rendimiento general dependerá de los recursos del servidor (CPU, RAM, disco duro, etc.)

Luis Alvarado
fuente
6

Si apoyara a un gran número de usuarios, tendría que investigar un método alternativo para manejar el proceso de conversión.

Por ejemplo, es probable que configure un sistema de programación de trabajos de modo que publique solicitudes en el sistema para convertir un archivo y sondear el sistema para el estado de finalización. El sistema de programación tomaría tareas de una cola y, por ejemplo, realizaría hasta cuatro conversiones de archivos a la vez.

Esta pregunta puede ser de interés:

/programming//q/265073/175849

Steve-o
fuente
Otra gran respuesta, gracias Steve-o
user784637