У меня довольно свежая установка 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, поэтому может просматривать только свои собственные процессы.
Вы также можете:-
Это должно сделать это: -
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», чтобы вставить новый модуль.
Вы должны увидеть немедленный результат.