Невозможно вызвать системные команды и сценарии оболочки из PHP Fedora 10

StackOverflow https://stackoverflow.com/questions/637430

Вопрос

Я работаю над приложением, которое работает локально на компьютере с Fedora 10 через PHP и Apache. Это зависит от процесса, который выполняется в фоновом режиме.

Руководители высшего звена хотят иметь возможность запускать / останавливать / перезапускать процесс через браузер. Я пытался заставить это работать, заставляя PHP делать вызовы системы, используя exec () и shell_exec, но это, похоже, не работает.

Когда я пытаюсь запустить процесс с помощью " exec ('processName') ", ничего не происходит.

Когда я пытаюсь использовать " exec ('killall processName') ", SELinux начинает постоянно выдавать предупреждения о том, что процесс разрешен (потому что я перевел его в разрешающий режим), однако на самом деле он не убивает процесс ! Но, похоже, это продолжается даже после полной загрузки страницы!?!?

Я могу вызывать другой сценарий аналогичным образом: "exec ('/ var / www / cgi-bin / ControlProgram START')". Поэтому я не совсем уверен, каковы основные различия между двумя вызовами / командами.

Я также поместил вызов скрипта в файл /etc/rc.local, чтобы скрипт запускался при входе в систему. Однако смогу ли я убить этот скрипт из PHP, так как он запускается ... системой?

Я не гуру, когда дело доходит до разрешений / SELinux, так что не жалейте подробностей! Заранее спасибо!

Это было полезно?

Решение 2

Я считаю, что нашел проблему. Я все еще не совсем уверен, в чем проблема, но похоже, что это как-то связано с правами доступа к файлам / каталогам. Когда я переместил сценарии в каталог / var / www / html, сценарии запустились. Я переместил их в / var / www / cgi-bin, и они тоже там работают. Так что это может быть что-то, где apache не может выполнять скрипты, которые находятся вне каталога / var / www, или, по крайней мере, он не может сделать это напрямую. Спасибо за вашу помощь, хотя!

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

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

Safe_Mode не позволит PHP выполнять что-либо вне определенной папки. В среде с общим хостингом это обычно означает, что вы можете выполнять только те вещи, которые относятся к вашей домашней папке / www - что, похоже, соответствует вашим заметкам.

Звучит как разрешения для старой школы Unix и как работает Apache. Я помню (хотя это было некоторое время), что apache осторожен в том, что он будет выполнять. Дважды проверьте ваши восьмеричные.

Чтобы убедиться, что это не SELinux, вы можете отключить его вместо разрешения. хотя это приведет к тому, что файловая система переименуется (или должна). В этот момент ваши расширенные атрибуты с контекстами SELinux могут выйти из строя и вызвать проблемы SELinux при повторном применении.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top