Um servidor pode lidar com comandos de shell simultâneos?

11

Estou escrevendo um simples MP3 player baseado em navegador em PHP . Parte deste projeto requer que todos os arquivos MP3 sejam convertidos em um arquivo WAV . Existe uma função no PHP chamada shell_execque permite executar um comando via shell. Para o meu projeto, sempre que alguém carrega uma música em sua conta, o seguinte comando é executado:

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

Então, digamos que há 10 pessoas diferentes que terminam de enviar uma música ao mesmo tempo. O servidor Linux executa 10 comandos de shell simultaneamente ou apenas um de cada vez?

Se um servidor puder manipular vários comandos do shell simultaneamente, o servidor poderá gerenciar a conversão de 10 músicas diferentes ao mesmo tempo ou será que apenas uma de cada vez?

user784637
fonte
Como esse ubuntu está relacionado? Não pertence à falha do servidor ou ao unix?
bitmask
5
Tenha muito cuidado ao aceitar o nome do arquivo de entrada do usuário. Alguém pode criar especialmente um nome de arquivo que imite algum comando, que você executaria e que seria essencialmente hackeado.
Rory

Respostas:

13

Se você estiver fazendo isso via PHP (ou qualquer outra linguagem que tenha acesso aos comandos do shell), eles serão feitos separadamente, o que significa que serão feitos simultaneamente se, por acaso, os 10 usuários usarem o script PHP ao mesmo tempo. Cada chamada do PHP shell_execserá feita independentemente das outras. Eu mesmo tenho um shell_execscript que mostra algumas informações aos meus usuários para determinadas imagens e isso é feito independentemente de outros scripts executados pelo PHP shell_exec.

Há um limite para quantos usuários simultâneos o PHP pode manipular, mas isso depende do servidor da web, do arquivo de configuração do PHP e do MySQL, se você o estiver usando. Eu sei que o número é maior que 100 ao mesmo tempo.

Ao usar comandos intensivos da CPU, por exemplo, converter vídeos, o uso efetivo dos comandos dependerá da quantidade de RAM que você possui e da quantidade de energia da CPU. Para alguém com 64 MB de RAM e 80486 , seria ruim tentar converter dois vídeos e 10 músicas. Isso sobrecarregaria o sistema. Para alguém com um servidor Core 2 Duo e 4 GB de RAM, acho que converter várias músicas seria um pedaço de bolo.

Então, basicamente, sim, o Linux pode lidar com vários comandos de shell simultâneos, especialmente do PHP, mas o desempenho geral dependeria dos recursos do servidor (CPU, RAM, unidade de disco rígido etc.)

Luis Alvarado
fonte
6

Se você fosse dar suporte a um grande número de usuários, teria que investigar um método alternativo de lidar com o processo de conversão.

Por exemplo, você provavelmente configuraria um sistema de agendamento de tarefas, de forma a publicar solicitações no sistema para converter um arquivo e pesquisar o status de conclusão do sistema. O sistema de agendamento retira tarefas de uma fila e, por exemplo, realiza até quatro conversões de arquivos por vez.

Esta pergunta pode ser do seu interesse:

/programming//q/265073/175849

Steve-o
fonte
Outra grande resposta, obrigado steve-o
#