Как правильно использовать модуль mod_env Apache для изменения PATH? - PullRequest
1 голос
/ 18 июня 2020

У меня есть несколько python сценариев, которые начинаются с этой строки shebang:

#!/usr/bin/env python3

При попытке запустить сценарии из командной строки все работает должным образом. При использовании Apache я получаю сообщение «Внутренняя ошибка сервера». Проверяя журналы ошибок, Apache сообщает: env: python3: No such file or directory.

Сначала я подумал, что это может быть связано с командой env. Однако использование сценария perl с этой строкой shebang:

#!/usr/bin/env perl отлично работает!

Я считаю, что это может быть связано с тем, как PATH настроен в Apache. Когда я выводю среду Apache с использованием рабочего сценария perl, ПУТЬ отображается как /usr/bin:/bin:/usr/sbin:/sbin. На моей машине env и perl указаны в /usr/bin, но python3 находится в /usr/local/bin, что не входит в путь Apache, как показано выше.

Я решил, что мне нужно добавить /usr/local/bin к Apache PATH, и я пытался использовать как SetEnv, так и PassEnv PATH, как описано в документации Apache здесь:

https://httpd.apache.org/docs/2.4/mod/mod_env.html

Однако, похоже, это не оказывает никакого влияния, поскольку проблема сохраняется.

Что я делаю не так?

PS - Когда я измените строку shebang на #!/usr/local/bin/python3, сценарий будет работать должным образом. Однако я хотел бы сохранить метод env для целей переносимости.

1 Ответ

0 голосов
/ 22 июня 2020
Обновление

: хотя мне не удалось заставить работать директивы SetEnv или PassEnv, мне удалось добиться желаемого поведения, изменив файл Apache envvars со строкой:

export PATH="/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"

, а затем перезапуск службы Apache.

Расположение файла envvars, вероятно, зависит от установки / распространения, но вы можете узнать, где он находится, проверка сценария apachectl, который содержит строку со ссылкой на файл envvars.

В моей системе это было /etc/apache2/envvars.

...