Подпроцесс Pythons с WSGI + Apache mpm-worker: IOError 4

У меня странная проблема, решение которой я не могу найти, выполнив поиск в сети: /

После переключения Apache с mpm-prefork на mpm-worker использование подпроцесса в моем (Django) приложении Python WSGI вызывает следующее исключение после зависания на пару раз:

IOError at /
[Errno 4] Interrupted system call

Рассматриваемый вызов:

out = check_output(['sudo', 'quota', user_id])

где check_output - это бэкпорт этой функции из Python 2.7, в то время как я использую Python 2.6 из репозиториев Debian Squeeze.

Процессы, по сути, вроде бы выполняются, но умирают:

ps aux | grep quota
root     15378  0.0  0.0  21864  1176 ?        S    02:34   0:00 sudo quota ...SOME_ID...
root     15379  0.0  0.0      0     0 ?        Z    02:34   0:00 [quota] <defunct>

Конфигурация Apache - это не более чем установка WSGIScriptAlias ​​и некоторых директив каталога.

Я упускаю очевидное?

Приветствует Себастьяна

Решение. Оказалось, что это ошибка в sudo. 1.7.4-4 поставляется с Debian 6. Решено установкой последней версии 1.8.x.deb с их домашней страницы.


person sbrandt    schedule 30.12.2011    source источник


Ответы (1)


В Python 2.7.2 есть ошибка, которая приводит к сбою вилки в суб-интерпретаторах. Попробуйте установить:

WSGIApplicationGroup %{GLOBAL}

в конфигурации Apache для этого приложения WSGI, чтобы принудительно использовать основной интерпретатор.

Отчет об ошибках Python для основных проблем:

http://bugs.python.org/issue13156

person Graham Dumpleton    schedule 30.12.2011
comment
Да, я видел ваш ответ в stackoverflow.com/questions/8309465, но, как я уже сказал, я использую Python 2.6. Я думал об этом решении раньше, но разве это не влияет на производительность моего приложения и решает ли оно проблему в версии 2.6? - person sbrandt; 31.12.2011
comment
Хорошо, при быстром просмотре вопроса я увидел Python 2.7 и ошибся. :-) - person Graham Dumpleton; 31.12.2011
comment
Кстати, пробовали ли вы использовать менее сложную команду, чем sudo. Например, "/ bin / echo hi". IOW, определите, не завершается ли выполнение какого-либо подпроцесса, или может быть что-то связано с требованиями, которые sudo предъявляет к доступу к материалам и выполнению особых действий. Также поработайте, если в системе включен SELinux, если он установлен. - person Graham Dumpleton; 31.12.2011
comment
Фактически, он работает с использованием более простой команды, такой как ['echo', 'hello']. Он также работает на второй виртуальной машине, где квота не установлена, и поэтому вызов не выполняется. Это также работает, если я использую ['quota', user_id] без sudo. - person sbrandt; 03.01.2012
comment
Вы настроили файл конфигурации sudoers, чтобы пользователь, работающий под Apache, мог использовать sudo для этой команды? - person Graham Dumpleton; 03.01.2012
comment
Как я уже сказал, он отлично работает с мод-префорком. Если я переключаюсь на mod-worker через apt-get, без каких-либо других изменений, возникает ошибка. - person sbrandt; 03.01.2012
comment
Оказалось, что это ошибка в sudo 1.7.4-4, поставляемом с Debian 6 (gratisoft.us/bugzilla/show_bug.cgi?id=447). Решено установкой последней версии 1.8.x.deb с их домашней страницы. - person sbrandt; 30.03.2012