Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Выполнить kill PID из скрипта php?

22K
26 ноября 2007 года
AlKov
28 / / 26.06.2007
Есть такая задача: из Web админки убить ppp сессию. Пишу следующий скрипт:
 
Код:
$port = $_GET['port'];
    $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
12
26 ноября 2007 года
alekciy
3.0K / / 13.12.2005
CGI ?
22K
26 ноября 2007 года
AlKov
28 / / 26.06.2007
Цитата: alekciy
CGI ?


Не понял.. :confused: Если несложно, в двух словах, как все это должно выглядеть?

12
26 ноября 2007 года
alekciy
3.0K / / 13.12.2005
Хм... я немного ошибся, мне казалось CGI программу можно будет запустить под произвольным пользователем. Но видимо нет...

А что sudo не помогает? http://www.opennet.ru/man.shtml?topic=sudo&category=8&russian=0
22K
26 ноября 2007 года
AlKov
28 / / 26.06.2007
Цитата: alekciy
Хм... я немного ошибся, мне казалось CGI программу можно будет запустить под произвольным пользователем. Но видимо нет...

А что sudo не помогает? http://www.opennet.ru/man.shtml?topic=sudo&category=8&russian=0



Тоже не катит.. :( Пробовал и такое

 
Код:
$port = $_GET['port'];
    $del="/var/run/ppp$port.pid";
    $pid=exec("cat $del");
    shell_exec("sudo -u user_apache /bin/kill ".$pid);

Тоже самое.. Вся беда в том, что я пытаюсь убить процесс, запущенный другим юзером, к тому же еще и root-ом! :( Видимо, такое "варварство" не прокатит... Скорее всего, эту идею придется похоронить и действовать по-старинке - root-ом с консоли.. А так хотелось мышкой по иконке! :rolleyes:
12
26 ноября 2007 года
alekciy
3.0K / / 13.12.2005
Э.... а почему у тебя пользователь то такой?? Запускай root-а. Опять же нужно еще делать записи в sudoers.

Или может проще запустить процесс не от root-а, а сразу от имени апача?
22K
26 ноября 2007 года
AlKov
28 / / 26.06.2007
Цитата: alekciy
Э.... а почему у тебя пользователь то такой?? Запускай root-а. Опять же нужно еще делать записи в sudoers.

Или может проще запустить процесс не от root-а, а сразу от имени апача?


Пользователь user_apache - это для примера (для конспирации, так сказать ;) ). Настоящий, от которого запущен апач, другой..Пускать через sudo root-а, себе дороже - это биллинг.. Умники ломануть могут.. :( Можно, конечно, запустить киляемый процесс от другого пользователя и им же и убивать, но... Биллинг работает уже не первый год, скомпилен от рута.. Вообщем, с такой "перестройкой" гемор получится громадный.. А оно того не стОит.. Тем более что в самом биллинге есть встроенная утилита, которая решает указанную задачу (закрывает и убивает зависшие сессии). Только тут ждать приходится, пока радиус определит, что сессия зависла, пока таймаут выберет.. Хотелось сделать "быстрый" килл из админки, но.. Не судьба, значит.. :(
Так-что, все понятно. Вопрос снят, тему можно закрывать..

2
27 ноября 2007 года
squirL
5.6K / / 13.08.2003
Цитата: alekciy
Хм... я немного ошибся, мне казалось CGI программу можно будет запустить под произвольным пользователем.


CGI программа и выполняется с правами владельца

Цитата:
Биллинг работает уже не первый год, скомпилен от рута


плохо.

Цитата:
Вся беда в том, что я пытаюсь убить процесс, запущенный другим юзером, к тому же еще и root-ом! Видимо, такое "варварство" не прокатит...


ну естественно =)

я посоветую сделать так: из админки писать в определенный каталог файлы с PID висячих процессом. затем - написать скрипт, проверяющий в каталоге наличие таких файлов, вытягивающий из них PID'ы и убивающий процессы. а потом - засунуть этот скрипт в рутовый crontab. и пускать - хоть каждые полминуты. либо просто написать микродемон на perl/shell.

а еще можно покрутить настройки Radius'a :)

22K
27 ноября 2007 года
AlKov
28 / / 26.06.2007
Цитата: squirL

я посоветую сделать так: из админки писать в определенный каталог файлы с PID висячих процессом. затем - написать скрипт, проверяющий в каталоге наличие таких файлов, вытягивающий из них PID'ы и убивающий процессы. а потом - засунуть этот скрипт в рутовый crontab. и пускать - хоть каждые полминуты. либо просто написать микродемон на perl/shell.

а еще можно покрутить настройки Radius'a :)


А какой смысл делать то, что уже реализвано в биллинге? То, что Вы предлагаете уже существует, и я уже упоминал об этом. Весь смысл моей задачи именно в том, чтобы уменьшить "время реагирования", ну или иметь возможность "ручного" регулирования для каких-то конкретных ситуаций...

Так-что, я решил пока забить на эту идею и продолжать жить по-старинке... ;)

2
27 ноября 2007 года
squirL
5.6K / / 13.08.2003
ну, в случае, если демон подхватывает изменение в каталоге PID'ов моментально - время реагирования и будет уменьшено до минимума
22K
27 ноября 2007 года
AlKov
28 / / 26.06.2007
Цитата: squirL
ну, в случае, если демон подхватывает изменение в каталоге PID'ов моментально - время реагирования и будет уменьшено до минимума


Сенкс! Понял. Попробуем на досуге... ;)

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог