Назад | Перейти на главную страницу

Проблема Apache + PHP: невозможно перечислить процессы, отличные от apache

У меня довольно свежая установка Apache (2.2.3 / Centos) + PHP (5.1.6) и следующая проблема: мне нужно отслеживать жизнь одного процесса, и для этого я запускаю:

$last_line = exec('ps -C snmpd');

и проверьте его вывод.

К сожалению, я всегда ничего не получаю. Я проверил его с другими именами процессов, и кажется, что он «видит» только процессы Apache.

Есть идеи, как это решить?

ОБНОВИТЬ: Выполнение другой команды system('snmpget -v2c -c public localhost '.$oid, $retval); отлично работает, есть проблема только с ps. Что странно (для меня), когда я вхожу как apache пользователь и запустить ps вручную работает корректно (все показывает).

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

Если вам требуется возможность запускать команды от имени другого пользователя, взгляните на suexec. http://httpd.apache.org/docs/2.2/suexec.html

Вы также можете использовать оператор обратной кавычки, чтобы добиться того же. Я подтверждаю, что он работает, а exec - нет.

$ out = `ps -aux | grep pianobarfly | grep -v grep`;

Попробуйте запустить фуллер ps позвони как:

ps aux | grep -i snmpd | grep -v grep

Наверное selinux. SELinux ограничивает домен, в котором работает httpd, поэтому может просматривать только свои собственные процессы.

Вы также можете:-

  1. Отключите selinux (не рекомендую) - setenforce 0
  2. Заставить httpd не использовать selinux (также не рекомендую, потому что httpd является вероятным вектором атаки) setsebool -P httpd_disable_trans = 1. Перезапустите httpd.
  3. Измените политику, чтобы разрешить просмотр процессов в / proc.

Это должно сделать это: -

policy_module(myhttpd,1.0.0)

gen_require(`
    type httpd_t;
')

kernel_read_system_state(httpd_t);

Установите selinux-policy-devel из yum.

Затем выполните команду «make -f / usr / share / selinux / devel / Makefile load», чтобы вставить новый модуль.

Вы должны увидеть немедленный результат.