Выполнить kill PID из скрипта php?
$del="/var/run/ppp$port.pid";
$pid=exec("cat $del");
exec("/bin/kill ".$pid);
Все отрабатывает до kill.. Последний exec ничего не возвращает, в логе httpd (error_log) - "kill XXXX: Operation not permitted".. Понятно, что не хватает прав для выполнения kill юзеру от которого запущен apache (в sudoers для этого юзера есть запись - ..ALL=(ALL) NOPASSWD: ALL).
Можно ли как-то обойти этот момент?
P.S. ОС - Linux Fedora Core 6, apache v 2.2.3, php v 5.1.6
Не понял.. :confused: Если несложно, в двух словах, как все это должно выглядеть?
А что sudo не помогает? http://www.opennet.ru/man.shtml?topic=sudo&category=8&russian=0
Тоже не катит.. :( Пробовал и такое
$del="/var/run/ppp$port.pid";
$pid=exec("cat $del");
shell_exec("sudo -u user_apache /bin/kill ".$pid);
Тоже самое.. Вся беда в том, что я пытаюсь убить процесс, запущенный другим юзером, к тому же еще и root-ом! :( Видимо, такое "варварство" не прокатит... Скорее всего, эту идею придется похоронить и действовать по-старинке - root-ом с консоли.. А так хотелось мышкой по иконке! :rolleyes:
Или может проще запустить процесс не от root-а, а сразу от имени апача?
Или может проще запустить процесс не от root-а, а сразу от имени апача?
Пользователь user_apache - это для примера (для конспирации, так сказать ;) ). Настоящий, от которого запущен апач, другой..Пускать через sudo root-а, себе дороже - это биллинг.. Умники ломануть могут.. :( Можно, конечно, запустить киляемый процесс от другого пользователя и им же и убивать, но... Биллинг работает уже не первый год, скомпилен от рута.. Вообщем, с такой "перестройкой" гемор получится громадный.. А оно того не стОит.. Тем более что в самом биллинге есть встроенная утилита, которая решает указанную задачу (закрывает и убивает зависшие сессии). Только тут ждать приходится, пока радиус определит, что сессия зависла, пока таймаут выберет.. Хотелось сделать "быстрый" килл из админки, но.. Не судьба, значит.. :(
Так-что, все понятно. Вопрос снят, тему можно закрывать..
CGI программа и выполняется с правами владельца
плохо.
ну естественно =)
я посоветую сделать так: из админки писать в определенный каталог файлы с PID висячих процессом. затем - написать скрипт, проверяющий в каталоге наличие таких файлов, вытягивающий из них PID'ы и убивающий процессы. а потом - засунуть этот скрипт в рутовый crontab. и пускать - хоть каждые полминуты. либо просто написать микродемон на perl/shell.
а еще можно покрутить настройки Radius'a :)
я посоветую сделать так: из админки писать в определенный каталог файлы с PID висячих процессом. затем - написать скрипт, проверяющий в каталоге наличие таких файлов, вытягивающий из них PID'ы и убивающий процессы. а потом - засунуть этот скрипт в рутовый crontab. и пускать - хоть каждые полминуты. либо просто написать микродемон на perl/shell.
а еще можно покрутить настройки Radius'a :)
А какой смысл делать то, что уже реализвано в биллинге? То, что Вы предлагаете уже существует, и я уже упоминал об этом. Весь смысл моей задачи именно в том, чтобы уменьшить "время реагирования", ну или иметь возможность "ручного" регулирования для каких-то конкретных ситуаций...
Так-что, я решил пока забить на эту идею и продолжать жить по-старинке... ;)
Сенкс! Понял. Попробуем на досуге... ;)