![]() |
Модераторы: korob2001, ginnie |
![]() ![]() ![]() |
|
lyl8000 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 4.8.2008 Репутация: нет Всего: нет |
В перле новичок, поэтому не очень понимаю, возможно простые вещи.
Итак, есть код:
Вопрос такой. Если не делать fork и отключение от консоли то все работает нормально, как только ставлю форк и отключаюсь от консоли вызовы exec или system перестают работать..... Что делать? Как быть? |
|||
|
||||
sir_nuf_nuf |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 920 Регистрация: 6.1.2008 Репутация: 14 Всего: 31 |
Привет!
В чем это выражается ? то что после fork() перестает работать exec() - это мистика =) Скорее всего проблема в другом. Что именно происходит не так, может не видно какого-то эффекта ? По пути, если ты хочешь писать демона - глянь на Daemon::Generic удобная штука. |
|||
|
||||
korob2001 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 31 Всего: 61 |
Я так понимаю нужны зомби? Может это поможет?
-------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
sir_nuf_nuf |
|
||||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 920 Регистрация: 6.1.2008 Репутация: 14 Всего: 31 |
ээ... подождите, а что вы вообще ожидаете получить ?
Вот в этом месте ваша программа кончается. exec подменяет вашу программу (perl) на pidof. все что написано после exec НЕ выполняется никогда (конечно если только exec не обвалится) pidof ? я так понимаю вы хотите получить pid процесса radiusd? тогда вам надо делать скорее так
а вообще узнавать пид по имени - плохая затея. каждый процесс может узнать свой пид так:
или так
пид дочернего процесса возвращается родителю при вызове fork():
|
||||||||||
|
|||||||||||
lyl8000 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 4.8.2008 Репутация: нет Всего: нет |
другими словами я пишу что то вроде программки, которая через определенный интервал времени проверяет заупущен ли радиус.
если его pid -1 это значит что он не запущен и его надо запустить. вроде бы все просто.... но... написал подругому:
ситуация следующая - тут все работает, до того момента пока я не выйду из консоли в которой запускал данный процесс. до выхода из консоли (logout) все нормально, процесс висит и перезапускает радиус.... после выхода из консоли - только пишет в файл что пытается перезапустить его но сам радиус не перезапускается.... вот ..... помоему я чего то глобального не понимаю.... подскажите плиз :'( |
|||
|
||||
GoDleSS |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 105 Регистрация: 11.2.2007 Где: Пироговский Репутация: 2 Всего: 2 |
Не хватает прав скорее всего. Запущен скрипт из под пользователя такого-то, а этот пользователь в логауте. Скрипт пытается делать вызовы внешних программ уже с другими правами. Может и ошибаюсь, но интуиция подсказывает, что копать в указанном направлении ![]() --------------------
It's a nice day to die my friend! |
|||
|
||||
sir_nuf_nuf |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 920 Регистрация: 6.1.2008 Репутация: 14 Всего: 31 |
выводите в лог результат выполнения `ваш скрипт`, а так же переменные $? и $^E
вот так:
логи пришлите сюда. вы уверены, что такое происходит именно при закрытии консоли? может сам ваш скрипт останавливается ? |
|||
|
||||
lyl8000 |
|
||||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 4.8.2008 Репутация: нет Всего: нет |
логи в студию!
это когда я в консоли еще. а вот случай когда я вышел из консоли и зашел снова:
во втором случае радиус так и не перезапустился.. причем фразу "Starting authorize radiusd:" пишет скрипт /etc/init.d/radius.sh . Таким образом получается что скрипт стартует, но радиус не поднимает ( а это, как я понимаю проблема уже из другой оперы.. все скрипты запускаю из под рута.. |
||||
|
|||||
sir_nuf_nuf |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 920 Регистрация: 6.1.2008 Репутация: 14 Всего: 31 |
А) хм... по пробуй не закрывать файловые дескрипторы, а перенаправлять их в /dev/null
такое ощущение, что радиус что то пытается написать в закрытый дескриптор. Б) подмени сам скрипт radiusd =) на что то простое:
т.е. перемести бинарник и на его место положи скрипт. |
||||
|
|||||
lyl8000 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 4.8.2008 Репутация: нет Всего: нет |
убрал вообще
close STDIN; close STDOUT; close STDERR; ничего не поменялось... а радиус стоит на рабочем сервере, там до 200 авторизаций в секунду )) не могу его подменить... надо вощем на кошках потренироваться. ![]() потренируюсь - отпишусь. Спасибо всем за помощь!!!! |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Perl" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |