Автор Тема: Перезагрузка сервера по требованию  (Прочитано 5022 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн DimDim

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 13
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Есть такая проблема: Написана програмам сервер на Perl. Но из за сбоев в данных она время от времени подвисает. Хорошо бы ее рестартовать, допустим каждый час. Отсюда вытекает необходимость обрабатывать и посылать сигналы. Кто нибудь знает, как это делается?
Читал хелп - ничего не понял. Заранее спасибо за пример.

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Перезагрузка сервера по требованию
« Ответ #1 : 07 Мая 2003, 16:48:57 »
man cron
man crontab
The documentations is your friend

Оффлайн DimDim

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 13
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Перезагрузка сервера по требованию
« Ответ #2 : 07 Мая 2003, 17:19:24 »
Блин..  
спасибо, помог...  
тут можно сказать фразой из фильма: "если вы такие умные, то чего же строем не ходите?" без обид только, ок?
проблема не в кроне. Крон - это только способ запустить прогу, которая должна дать сигнал серваку. или сервак можно запустить с параметром. У меня проблема в событиях и сигналах.

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Перезагрузка сервера по требованию
« Ответ #3 : 07 Мая 2003, 17:28:09 »
DimDim тон смени, тебе а не мне совет нужен, и теперь по порядку все подробности.
Вот это на нормальный русский язык переведи: "Написана програмам сервер на Perl."
Я не понял что это предложение должно означать.
Далее, что за сервер что за ОС.
[OFF]Или тебя хеш  %SIG интересует? Тогда в perldoc perlvar.[/OFF]
The documentations is your friend

Оффлайн DimDim

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 13
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Перезагрузка сервера по требованию
« Ответ #4 : 07 Мая 2003, 18:07:21 »
Да я же говорю, без обид...  Конечно, речь идет именно об хеше %SIG Но вот в том то и беда, что не могу я послать сигнал процессу. Дело в том, что обращение KILL идет через pid, а я не понимаю, откуда вторая прога возьмет инфу о том pid. и вот тут то и весь затык.
Строго говоря, надо передать в процесс команду на перезагрузку.
обработчик я сделал - не велика мудрость, а вот как сигнал послать - это вопрос.

Оффлайн DimDim

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 13
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Перезагрузка сервера по требованию
« Ответ #5 : 07 Мая 2003, 18:10:14 »
а, сори, сервер мой, написанный самолично, ничего сложного - подключается тунелем к сокету и сосет из него информацию, потом ее обрабатывает. все в реальном времени. Но вот если источник подвисает, вот тут и начинаются проблемы. дело в том, что программа дложна работать ВСЕГДА. а это не получается, она сбоит при любом сбое источника (сокет разрывается). А потом, на виртуальных хостах есть такая тенденция - админы пришибают слишком долго висящие процессы даже не разбираясь, а собственно говоря, что это такое.  OC - FreeBSD 4.5

Оффлайн Alone

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 182
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Перезагрузка сервера по требованию
« Ответ #6 : 07 Мая 2003, 18:17:18 »
а разве коммандой ps
нельзя узнать pid ?
Уточню ps -axw

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Перезагрузка сервера по требованию
« Ответ #7 : 07 Мая 2003, 18:29:18 »
pid хранится в спец переменной $$.
Запиши в файл и обновляй номер при перезапуске сервера.
The documentations is your friend

Оффлайн DimDim

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 13
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Перезагрузка сервера по требованию
« Ответ #8 : 07 Мая 2003, 18:30:22 »
НЕ могу, к сожалению . Полностью все прикрыто. Это же не мой сервер, а виртуальный сервер.
ps: proc size mismatch (108120 total, 1056 chunks)

Оффлайн DimDim

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 13
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Перезагрузка сервера по требованию
« Ответ #9 : 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

  • санитар леса
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1780
  • +0/-0
  • 2
    • Просмотр профиля
Перезагрузка сервера по требованию
« Ответ #10 : 07 Мая 2003, 18:50:15 »
DimDim
может вызывать kill из crontab\'а?
•••Jah\'d never let us down!•••

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Перезагрузка сервера по требованию
« Ответ #11 : 07 Мая 2003, 18:56:29 »
perldoc perlipc
Там очень хорошо все описано.
The documentations is your friend

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28