Есть сервак с CentOS 5.3. На нем имеется PHP-страничка (под Апачем), запускающая с помощью функции exec разные процессы (команды типа cat и другие скрипты). Беда в том, что иногда (не удалось пока понять, когда именно) вызов exec обламыватся, жалуясь, что он Unable to fork. Как водится, лично у меня все работает, а вот у других пользователей сия ошибка возникает время от времени.
Хотябы начните с того каким образом php крутится? Модулем или как cgi?
Пых крутится модулем, в логах апача и в /var/log/messages пока ничего стоящего не заметил. Собственно, кроме скриншота страницы браузера с ошибкой до сих пор нет никаких свидетельств существования проблемы. Начинаю думать, что надо мной неумно шутят :)
ПОЧЕМУ?[/quote]
Знал бы, вопроса бы не было. Потому и спрашиваю: где копать, на что смотреть? Скажем, выдвигались версии, что достигнут лимит на максимальное количество процессов для пользователя, но нет, не мой случай.
drBatty написал:
распечатайте его, скрутите в трубочку, и засуньте в задницу.
Iskan Der, и да, сообщения об ошибках не сообщают об ошибках. ВНЕЗАПНО, они сообщают о причинах ошибки. А unable to fork это как в том анекдоте: "ну не смогла я, не смогла..."
блин У ВАС НА ЭКРАНЕ НАПИСАНО. после Unable to fork. Например может потому, что памяти нет, или ещё по каким-то причинам.[/quote]
Я так на тупого похож? Если бы там было написано что-то в духе "Unable to fork. Do the following to fix this error:...", я бы и без вашей задницы разобрался, что к чему. Или, во всяк, подробнее бы расписал проблему. Однако пых ограничился простым "Unable to fork: <команда>". В роли команды выступают шелловые команды (скажем, tail -n 10 /path/to/file) и запуск скриптов (php /path/to/script).
Я так на тупого похож? Если бы там было написано что-то в духе "Unable to fork. Do the following to fix this error:...", я бы и без вашей задницы разобрался, что к чему. Или, во всяк, подробнее бы расписал проблему. Однако пых ограничился простым "Unable to fork: <команда>". В роли команды выступают шелловые команды (скажем, tail -n 10 /path/to/file) и запуск скриптов (php /path/to/script).
ну вот не может выполнится "команда". А почему - известно лишь телепатам, и тому, кто знает, что за "команда".
Iskan Der написал:
Я так на тупого похож?
не на "тупого", а просто на человека, который НИЧЕГО не понимает в Linux. Возможно вы талантливый писатель, или там архитектор. Ибо такое
Iskan Der написал:
команды типа cat и другие скрипты
мог написать только человек, который эту cat видел только на картинках wink
По теме: вот вам мануал: http://php.net/manual/ru/function.exec.php
У любой команды shell имеется код возврата. В случае успеха он равен нулю, в случае неудачи... Потому как сдаётся мне, что это пишет не php модуль, а сама "команда". А "команда" очевидно может писать что угодно.
ну вот не может выполнится "команда". А почему - известно лишь телепатам, и тому, кто знает, что за "команда".
Еще раз медленно: есть скрипт, скрипт иногда не делает то, что должен, а именно не может запустить процесс. Знаю, что это НЕХ, понять, где косяк, не могу, потому спрашиваю: где, помимо логов апача, можно поискать следы этой НЕХ и на что еще следует обратить внимание (настройки безопасности или еще чего)?
Да, на текущем этапе это все похоже на гадание на кофейной гуще, но, увы, подробностей у меня пока нету.
drBatty написал:
не на "тупого", а просто на человека, который НИЧЕГО не понимает в Linux. Возможно вы талантливый писатель, или там архитектор. Ибо такое
[quote=Iskan Der]команды типа cat и другие скрипты
мог написать только человек, который эту cat видел только на картинках wink [/quote]
Кое-чего понимаю (на жизнь хватает), а к словам придираться не надо, я не филолог, мне линух чисто по работе, а не для литературных экзерсисов.
drBatty написал:
У любой команды shell имеется код возврата. В случае успеха он равен нулю, в случае неудачи... Потому как сдаётся мне, что это пишет не php модуль, а сама "команда". А "команда" очевидно может писать что угодно.
Если бы писала сама команда, ее вывод ушел бы в переменную и нормально обработался. "Unable to fork" пишет сам пых, какбэ намекая, что он вообще не может запустить что-либо exec'ом.
Еще раз медленно: есть скрипт, скрипт иногда не делает то, что должен, а именно не может запустить процесс. Знаю, что это НЕХ, понять, где косяк, не могу, потому спрашиваю: где, помимо логов апача, можно поискать следы этой НЕХ и на что еще следует обратить внимание (настройки безопасности или еще чего)?
Да, на текущем этапе это все похоже на гадание на кофейной гуще, но, увы, подробностей у меня пока нету.
я вот понять не могу - логов апача тоже нет? чей сервер-то?
Показать
Iskan Der написал:
Кое-чего понимаю (на жизнь хватает), а к словам придираться не надо, я не филолог, мне линух чисто по работе, а не для литературных экзерсисов.
просто это детектор. назовите в автосервисе бензин трансмиссией - цена ремонта поднимется в 10 раз. я вам бесплатно помогаю, потому просто издеваюсь :lol:
Iskan Der написал:
Если бы писала сама команда, ее вывод ушел бы в переменную и нормально обработался. "Unable to fork" пишет сам пых, какбэ намекая, что он вообще не может запустить что-либо exec'ом.
откуда такая уверенность? лично я даже этого пресловутого скрина не видел. ну вы таки видели, вам веры больше. если б cat от скриптов отличать научились. :lol:
и да, мой опыт подсказывает, что ежели php не может форкнуть, он ещё и пишет ПОЧЕМУ не может. ну раз у вас не пишет, значит это либо фотошоп, либо это команда пишет, либо это глюк RH, либо это НЁХ. И именно в таком порядке. Это вообще говоря не относится (я повторяюсь) к Linux, это тупо логика. Ну не может программист написать сообщение об ошибке "это ошибка", если он не полный даун конечно - ему же ведь свой быдлокод и отлаживать. Потому программист пишет в сообщении "не могу форкнуть, потому-что памяти мало", или типа того. Ну или там "Error 1289453", если он желает, что-бы данную проблему решили только те, кто работает в платной версией и с техподдержкой.
я вот понять не могу - логов апача тоже нет? чей сервер-то?
Iskan Der написал:
в логах апача и в /var/log/messages пока ничего стоящего не заметил
Если нужы подробности, то дословно в логе апаче есть:
text
PHP Warning: exec() [<a href='function.exec'>function.exec</a>]: Unable to fork [tail -n 10 '/path/to/file'] in /var/www/html/script.php on line 123
Показать
drBatty написал:
просто это детектор. назовите в автосервисе бензин трансмиссией - цена ремонта поднимется в 10 раз. я вам бесплатно помогаю, потому просто издеваюсь :lol:
Я команду cat назвал командой. Она недостаточно команда? Бензин можно звать строго бензином, никак не топливом/горючкой/и т.п.?
Что до вас, то вы пока не помогаете, а только острите тупым концом. Подскажие что-нибудь дельное сначала, а потом можете глумиться, сколько душа пожелает.
drBatty написал:
откуда такая уверенность? лично я даже этого пресловутого скрина не видел. ну вы таки видели, вам веры больше. если б cat от скриптов отличать научились. :lol:
Ну в свои не так уж и мало лет я могу отличить варнинг, выданный пыхом, от собственного вывода. Ну а любителям высокого слога разъясняю доходчиво первый пост: скрипт пытается выполнить некие команды (типа cat) и некие скрипты (под собирательным названием "другие"). Ферштейн?
Опа! А вот это уже что-то. А ну-ка часть этого скрипта включая как таки пресловую строку 123 выведите сюда. У тя там точно косяк.
P.S. А вообще и правда, почему все еще нет самого скрипта? Нет ни логов, ни конфигов, нифига. Реально, гадание на кофейной гуще.
Скрипт целиком не привожу, ибо:
а) в него вхардкодено много конфиденциального барахла
б) он реально примитивен по сути: выдает обычную форму, по кнопке "Запустить" запускает внешний скрипт через exec, после чего просто показывает кусок лога, в который внешний скрипт пишет.
Про логи уже упоминал, где еще стоит поискать что-нибудь подозрительное?
кстати вам на будущее: команда bash ulimit рута лишь по случайному совпадению совпала с тем, что выставлено в конфиге апача (это значение устанавливается системной функцией ulimit(3) из glibc)