Может ли сервер обрабатывать одновременные команды оболочки?

11

Я пишу очень простой браузерный MP3- плеер на PHP . Часть этого проекта требует, чтобы каждый файл MP3 был преобразован в файл WAV . В PHP есть функция, shell_execкоторая позволяет вам выполнять команду через оболочку. Для моего проекта всякий раз, когда кто-то загружает песню в свою учетную запись, будет выполняться следующая команда:

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

Допустим, есть 10 разных людей, которые заканчивают загрузку песни в одно и то же время. Выполняет ли сервер Linux 10 команд оболочки одновременно или только одну?

Если сервер может обрабатывать несколько команд оболочки одновременно, сможет ли сервер одновременно обрабатывать 10 разных песен или он выполняет только одну?

user784637
источник
Как это связано с Ubuntu? Разве это не относится к serverfault или unix?
битовая
5
Будьте очень осторожны, принимая входное имя файла от пользователя. Кто-то может специально создать имя файла, которое имитирует какую-то команду, и которую вы выполняете, и вы по сути будете взломаны.
Рори

Ответы:

13

Если вы делаете это через PHP (или любой другой язык, который имеет доступ к командам оболочки), они будут выполняться отдельно, что означает, что они будут выполняться одновременно, если случайно 10 пользователей одновременно используют PHP-скрипт. Каждый вызов PHP shell_execбудет выполняться независимо от других. У меня сам есть shell_execскрипт, который показывает некоторую информацию моим пользователям для определенных изображений, и это делается независимо от других скриптов, выполняемых PHP shell_exec.

Существует ограничение на количество одновременных пользователей PHP, но это зависит от вашего веб-сервера, файла конфигурации PHP и MySQL, если вы используете его. Я знаю, что число больше 100 одновременно.

При использовании команд, интенсивно использующих процессор, например, для преобразования видео, эффективное использование команд будет зависеть от того, сколько у вас оперативной памяти и сколько у вас ресурсов процессора. Для кого-то с 64 МБ ОЗУ и 80486 было бы плохо попытаться конвертировать два видео и 10 песен. Это перегрузит систему. Для кого-то с сервером Core 2 Duo и 4 ГБ оперативной памяти, я думаю, преобразование нескольких песен было бы просто.

В общем, да, Linux может обрабатывать несколько одновременных команд оболочки, особенно из PHP, но общая производительность будет зависеть от ресурсов сервера (ЦП, ОЗУ, жесткий диск и т. Д.)

Луис Альварадо
источник
6

Если бы вы поддерживали большое количество пользователей, вам пришлось бы исследовать альтернативный метод обработки процесса конвертации.

Например, вы, скорее всего, настроите систему планирования заданий так, чтобы вы отправляли в систему запросы на преобразование файла и опрашивали систему о статусе завершения. Система планирования будет брать задачи из очереди и, скажем, выполнять до четырех преобразований файлов одновременно.

Этот вопрос может представлять интерес:

/programming//q/265073/175849

Стив-О
источник
Еще один отличный ответ, спасибо steve-o
user784637