Python - нет вывода при запуске как Apache, нет ошибок

Сценарий Python запускается с помощью команды shell_exec, но ничего не выводит.

Под отсутствием вывода я подразумеваю отсутствие ошибок, и при направлении вывода в файл файл создается, но остается пустым.

Что работает:

  • Запуск этого скрипта от имени любого другого пользователя
  • Запуск этого скрипта как apache с использованием sudo -u apache ...
  • Другие команды shell_exec запускаются как apache
  • Другие сценарии Python запускаются как apache в том же исходном каталоге
  • Другие сценарии Python запускаются с использованием shell_exec в том же сценарии PHP, который выводится в ту же папку.

Единственное различие между скриптами, которые работают, и скриптами, которые не работают, - это использование import для загрузки модулей.

ОБНОВЛЕНИЕ: похоже, что это проблема с разрешениями, но я не могу понять, почему

/usr/local/bin/python2.7: can't open file '/var/www/scripts/script.py': [Errno 13] Permission denied

Расположение скрипта: /var/www/scripts

/var
drwxrwxr-x.  20 root apache  4096 Oct 26 00:04 var

/var/www
drwxrwxr-x.  8 root apache 4096 Oct 13 13:55 www

/var/www/scripts
drwxrwxrwx. 2 apache apache 4096 Oct 27 01:26 scripts

/var/www/scripts/script.py
-rwxrwxrwx. 1 apache apache 1315 Oct 27 09:25 script.py

ОБНОВЛЕНИЕ: F ***** g SELinux.

Временное отключение SELinux с помощью setenforce Permissive решает проблему. Как лучше всего сделать так, чтобы SELinux позволял Apache постоянно запускать этот скрипт из этого каталога?

См. Также Как я могу отладить проблемы с exec ()? и python -v -v -d

mario 27.10.2018 03:10

@mario - все отчеты об ошибках включены, и в журналах ничего нет. Пытался добавить эти флаги, но тоже ничего не получил.

SQueryL 27.10.2018 03:17

«Единственная разница между скриптами, которые работают, и скриптами, которые не работают, - это использование import для загрузки модулей». Тогда разве вы не должны показывать нам эту часть кода? Я не знаю, как мы можем помочь, не видя этого. Пожалуйста, прочтите Как спросить.

Chris 27.10.2018 04:16

Эти флаги ничего не сделают, если вы не последуете совету в справочнике (а не только первому ответу!)

mario 27.10.2018 04:42

@Chris, импорт не является чем-то особенным (я не думаю). он просто импортирует timeurllib2 и sys

SQueryL 27.10.2018 05:26

Есть ли шанс, что Apache запускает скрипт с Python 3? urllib2 там не существует.

Chris 27.10.2018 05:52

@Chris: Я указываю версию Python в shell_exec, используя /usr/local/lib/python2.7, поэтому сомневаюсь в этом. И, как я уже упоминал в сообщении, когда сценарий запускается с использованием sudo -u apache в оболочке, все работает нормально. Это не работает только при вызове через PHP-скрипт в браузере.

SQueryL 27.10.2018 07:31

@Chris обновил мой вопрос с проблемами с разрешениями. Есть предположения?

SQueryL 27.10.2018 11:39

Вообще-то да, может быть. Какую ОС вы используете? SELinux, AppArmor или аналогичные могут мешать этому работать.

Chris 27.10.2018 14:49

CentOS 6. Думал, что отключил SELinux ..

SQueryL 27.10.2018 14:54

SELinux выглядит виноватым. Временное отключение с помощью setenforce Permissive решает проблему. Какое лучшее постоянное решение, позволяющее SELinux разрешить apache запускать этот скрипт из этого каталога?

SQueryL 27.10.2018 15:09

Это сложный вопрос, поскольку он полностью зависит от ваших целей. Постоянное отключение SELinux, безусловно, сработает, но тогда вы потеряете другие его средства защиты. Я бы не рекомендовал это, но, поскольку вы думали, что уже отключили его, возможно, это нормально. Вы также можете создать политику SELinux, чтобы Apache мог запускать этот сценарий. Как это сделать, выходит за рамки того, что мы можем здесь рассказать, но в Интернете есть учебные пособия.

Chris 27.10.2018 18:58
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
12
143
0

Другие вопросы по теме