Forum Webscript.Ru

Программирование => Perl => Тема начата: DimDim от 07 Мая 2003, 16:46:07

Название: Перезагрузка сервера по требованию
Отправлено: DimDim от 07 Мая 2003, 16:46:07
Есть такая проблема: Написана програмам сервер на Perl. Но из за сбоев в данных она время от времени подвисает. Хорошо бы ее рестартовать, допустим каждый час. Отсюда вытекает необходимость обрабатывать и посылать сигналы. Кто нибудь знает, как это делается?
Читал хелп - ничего не понял. Заранее спасибо за пример.
Название: Перезагрузка сервера по требованию
Отправлено: NeoNox от 07 Мая 2003, 16:48:57
man cron
man crontab
Название: Перезагрузка сервера по требованию
Отправлено: DimDim от 07 Мая 2003, 17:19:24
Блин..  
спасибо, помог...  
тут можно сказать фразой из фильма: "если вы такие умные, то чего же строем не ходите?" без обид только, ок?
проблема не в кроне. Крон - это только способ запустить прогу, которая должна дать сигнал серваку. или сервак можно запустить с параметром. У меня проблема в событиях и сигналах.
Название: Перезагрузка сервера по требованию
Отправлено: NeoNox от 07 Мая 2003, 17:28:09
DimDim тон смени, тебе а не мне совет нужен, и теперь по порядку все подробности.
Вот это на нормальный русский язык переведи: "Написана програмам сервер на Perl."
Я не понял что это предложение должно означать.
Далее, что за сервер что за ОС.
[OFF]Или тебя хеш  %SIG интересует? Тогда в perldoc perlvar.[/OFF]
Название: Перезагрузка сервера по требованию
Отправлено: DimDim от 07 Мая 2003, 18:07:21
Да я же говорю, без обид...  Конечно, речь идет именно об хеше %SIG Но вот в том то и беда, что не могу я послать сигнал процессу. Дело в том, что обращение KILL идет через pid, а я не понимаю, откуда вторая прога возьмет инфу о том pid. и вот тут то и весь затык.
Строго говоря, надо передать в процесс команду на перезагрузку.
обработчик я сделал - не велика мудрость, а вот как сигнал послать - это вопрос.
Название: Перезагрузка сервера по требованию
Отправлено: DimDim от 07 Мая 2003, 18:10:14
а, сори, сервер мой, написанный самолично, ничего сложного - подключается тунелем к сокету и сосет из него информацию, потом ее обрабатывает. все в реальном времени. Но вот если источник подвисает, вот тут и начинаются проблемы. дело в том, что программа дложна работать ВСЕГДА. а это не получается, она сбоит при любом сбое источника (сокет разрывается). А потом, на виртуальных хостах есть такая тенденция - админы пришибают слишком долго висящие процессы даже не разбираясь, а собственно говоря, что это такое.  OC - FreeBSD 4.5
Название: Перезагрузка сервера по требованию
Отправлено: Alone от 07 Мая 2003, 18:17:18
а разве коммандой ps
нельзя узнать pid ?
Уточню ps -axw
Название: Перезагрузка сервера по требованию
Отправлено: NeoNox от 07 Мая 2003, 18:29:18
pid хранится в спец переменной $$.
Запиши в файл и обновляй номер при перезапуске сервера.
Название: Перезагрузка сервера по требованию
Отправлено: DimDim от 07 Мая 2003, 18:30:22
НЕ могу, к сожалению . Полностью все прикрыто. Это же не мой сервер, а виртуальный сервер.
ps: proc size mismatch (108120 total, 1056 chunks)
Название: Перезагрузка сервера по требованию
Отправлено: DimDim от 07 Мая 2003, 18:48:41
Проблема
При получении сигнала HUP сервер должен перезапускаться, по аналогии i inetd или httpd.
Решение
Перехватите сигнал SIGHUP и перезапустите свою программу:
$SELF.= "/usr/local/libexec/myd"; # Моя программа
@ARGS = qw(-l /var/log/myd -d); # Аргументы
$SIG{HUP} = \\&phoenix;
sub phoenix {
# Закрыть все соединения, убить потомков и
# приготовиться к корректному возрождению.
exec($SELF, OARGS) or die "Couldn\'t restart: $!\\n";
}

Внимание вопрос: как послать сигнал HUP процессу? Может ли он его посылать сам себе? если нет, то как это замутить?
Название: Перезагрузка сервера по требованию
Отправлено: Xander от 07 Мая 2003, 18:50:15
DimDim
может вызывать kill из crontab\'а?
Название: Перезагрузка сервера по требованию
Отправлено: NeoNox от 07 Мая 2003, 18:56:29
perldoc perlipc
Там очень хорошо все описано.