Apache httpd не загружает .bashrc - PullRequest
2 голосов
/ 22 марта 2012

Я использую скрипты Python как CGI под Apache 2.2. Эти скрипты полагаются на переменные окружения, установленные в моем .bashrc для правильной работы. .Bashrc никогда не загружается, и мои сценарии не выполняются.

Я не хочу дублировать мой bashrc, используя кучу команд SETENV; файлы конфигурации легко выйдут из синхронизации и станут причиной труднодоступных ошибок.

Я использую apache как мой пользователь, а не как root. Я запускаю / останавливаю его вручную, поэтому скрипт /etc/init.d вообще не должен иметь значения (я думаю).

Учитывая эти ограничения, что я могу сделать, чтобы мой .bashrc загружался при вызове моего CGI?

Редактировать: я использую / usr / sbin / apache2ctl, чтобы сделать перезапуск.

Ответы [ 2 ]

0 голосов
/ 22 марта 2012

Почему вы запускаете / останавливаете его вручную? Казалось бы, использование сценария инициализации было бы полезно. Вы можете указать имя пользователя, под которым должен выполняться процесс httpd, в файле httpd.conf, а также указать параметры среды. Для RedHat / CentOs это будет выглядеть так:

Добавьте параметры среды в файл / etc / sysconfig / httpd (альтернативно, вы можете настроить команду для чтения этих переменных среды из другого файла, а также, при необходимости, настроить те же команды в вашем .bashrc - так есть только один файл, который содержит необходимые настройки среды).

Измените файл /etc/httpd/conf/httpd.conf, чтобы пользователь, запускающий процесс httpd, был пользователем без полномочий root (по умолчанию это должен быть apache в RedHat / CentOs).

Как только это будет сделано, используйте /etc/init.d/httpd для запуска и остановки процесса, и вы должны быть в хорошей форме.

Обновлено в ответ на комментарий автора:

Вы не хотите читать из вашего bashrc ... и использовать /usr/init.d/httpd restart (это так же просто, как apache2ctl) ... Что касается того, как это сделать, поместите переменные среды в новый файл. в приведенном ниже примере я предполагаю, что вы используете файл "/ etc / httpd / envconfig". Затем добавьте эти строки в ваш bashrc и / etc / sysconfig / httpd:

if [-f / etc / httpd / envconfig]; затем , / И т.д. / HTTPD / envconfig фи

Теперь и ваш bash, и ваш httpd-скрипт должны работать с обновленными переменными среды.

Еще одно замечание: переменные среды CGI обрабатываются по-разному в Apache, вы можете проверить этот URL:

http://httpd.apache.org/docs/2.2/env.html

В частности, «... переменные могут также передаваться из среды оболочки, которая запустила сервер с использованием директивы PassEnv ...»

Полагаю, вам нужно поместить соответствующие директивы PassEnv в файл httpd.conf, указав имена переменных среды, которые вы хотите передать в сценарии CGI. Хорошей новостью является то, что вам не нужно указывать значение, поэтому, если вы не изменяете имена самих переменных, вам не нужно управлять двумя конфигурациями.

0 голосов
/ 22 марта 2012

Что?Конечно, вы не имеете в виду, что ваши сценарии зависят от конфигураций в личном домашнем каталоге какой-либо учетной записи.

Файлы конфигурации Apache могут экспортировать переменные среды в сценарии CGI и т. Д.

Возможно, ваша программа слишком зависимана слишком много переменных среды.Как насчет поддержки файла конфигурации: /etc/mypythonprogram.rc.Может быть одна переменная среды, указывающая программе использовать альтернативный файл конфигурации для гибкости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...