Запуск Twistd от имени пользователя root, модули не найдены.

У меня есть простой веб-сервер, написанный на Twisted, и я пытаюсь запустить его демоном с помощью twistd. Все работает нормально с reactor.run(), но когда я использую twistd -y (как root), ни один из моих пакетов, находящихся в прямых дочерних каталогах, не найден. Я запускаю Twistd от имени пользователя root, так как сервер работает на 80-м порту. а> говорит:

Обратите внимание, что если twistd запускается от имени пользователя root, поиск модулей Python в рабочем каталоге не выполняется.

Ну, это здорово, но почему? И как я могу обойти? Twistd, кажется, игнорирует --rundir ., даже если я устанавливаю эту опцию явно.


person jpsimons    schedule 27.11.2009    source источник
comment
Вы пытались установить переменную PYTHONPATH? docs.python.org/using/cmdline.html#envvar-PYTHONPATH   -  person miku    schedule 27.11.2009
comment
Что ж, я могу настроить путь поиска вручную следующим образом: import sys sys.path.insert(0, .) Но это довольно неубедительно. . всегда должен быть в пути поиска. Я предполагаю, что мой вопрос в том, что кто-нибудь использует twistd для запуска сервисов на хорошо известных портах?   -  person jpsimons    schedule 27.11.2009
comment
Не полагайтесь на rundir для этого. См. twistedmatrix.com/trac/ticket/2572.   -  person digenishjkl    schedule 21.03.2016


Ответы (1)


Общая мудрость UNIX заключается в том, что поиск в рабочем каталоге вещей, которые нужно выполнить, когда root — плохая идея. Аргумент состоит в том, что это открывает дверь для троянов. Не пытаясь добавить рабочий каталог в путь поиска импорта модуля Python при работе от имени пользователя root, twistd в основном пытается следовать этой мудрости.

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

Вы также можете полностью отказаться от запуска от имени пользователя root и использовать authbind для привязки портов с низким номером без привилегий суперпользователя. Вот как развернуты все мои серверы.

person Jean-Paul Calderone    schedule 27.11.2009
comment
Подождите, с authbind я могу работать на портах ‹ 1024, не будучи root, и мне не нужно перекомпилировать свое ядро? Это здорово, если бы я знал об этом раньше. - person jpsimons; 27.11.2009