можно ли убивать сервер, и как это делвать правильно...

Администирование клиентской и серверной части InterBase, Firebird, Yaffil. Настройка файла конфигурации и т.п.

Модераторы: kdv, Alexey Kovyazin

Ответить
jake
Сообщения: 16
Зарегистрирован: 24 фев 2005, 09:03

можно ли убивать сервер, и как это делвать правильно...

Сообщение jake » 02 мар 2005, 12:09

FB 1.5 CS под Linux.
Подскажите, как классик реагирует на его убийство сигналом TERM?
т.е. можно ли делать так: kill <fb-pid> или killall fb_inet_server?

Корректно ли завершать клиентский процесс таким образом? Не может ли это вызвать повреждения базы?

спасибо.

jake
Сообщения: 16
Зарегистрирован: 24 фев 2005, 09:03

Сообщение jake » 02 мар 2005, 12:14

тьфу. не "клиентский процесс" конечно... :) имел ввиду процесс сервера, обслуживающий конкретный клиентский коннект.

то же самое насчет Супера. можно ли с ним так поступать?

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 02 мар 2005, 12:45

в общем случае - нет. клиентский процесс, а тем более супер, может в это время заниматься записью данных на диск, а еще хуже - сборкой мусора. Это насчет терминирования. а вот как оно обрабатывает сигналы типа wm_quit или остановку сервиса - честно говоря, не знаю. вполне возможно что так же.

jake
Сообщения: 16
Зарегистрирован: 24 фев 2005, 09:03

Сообщение jake » 02 мар 2005, 13:50

kdv писал(а):в общем случае - нет. клиентский процесс, а тем более супер, может в это время заниматься записью данных на диск, а еще хуже - сборкой мусора.
Насколько я знаю, обычно приложения в юникс совершенно нормально относятся к их завершению сигналом 15 (TERM). При этом большинство из них завершают работу абсолютно корректно (в отличие например от убиства 9-м сигналом). Т.е. TERM обычно воспринимается как: "доделать недоделанное и завершить работу". Так что и FB может к примеру дособирать мусор (если действительно этот процесс нельзя останавливать посередине) и завершиться...

Чаще всего можно найти (в тех же man) как приложение реагирует на тот или иной сигнал.
В доке firebird ничего не нашел по этому поводу, так что остаётся только догадываться

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 02 мар 2005, 14:28

jake писал(а): Насколько я знаю, обычно приложения в юникс совершенно нормально относятся к их завершению сигналом 15 (TERM).
С FB на боевой базе даже не пытаюсь, на девелоперских проблем пока не было, но там и нагрузка и замусоренность близка к нулю. А вот с IB4 имел из-за этого повреждения базы в среднем раз в 8 месяцев. Под этим антиквариатом у меня бакапы были нересторабельны и ночной крон вырубал забывших запущенную задачу пользователей и осуществлял файловое копирование.

DSKalugin
Сообщения: 212
Зарегистрирован: 27 окт 2004, 13:39

Сообщение DSKalugin » 03 мар 2005, 14:48

убивать таким образом нельзя
надо использовать готовые функции управления сервисом
service firebird stop/start/restart или reload
это может быть по разному на разных линуксах

на старой шапке у меня работало
service gds_db stop
на сусях /etc/init.d/firebird stop

но не килом

dimitr
Разработчик Firebird
Сообщения: 888
Зарегистрирован: 26 окт 2004, 16:20

Сообщение dimitr » 04 мар 2005, 13:13

Сервер не содержит обработчика SIGTERM, поэтому случиться может все, что угодно.

jake
Сообщения: 16
Зарегистрирован: 24 фев 2005, 09:03

Сообщение jake » 09 мар 2005, 10:23

dimitr писал(а):Сервер не содержит обработчика SIGTERM, поэтому случиться может все, что угодно.
Спасибо. понятно.

Как тогда правильно остановить все процессы классика? Ведь остановка xinetd (/etc/init.d/xinetd stop) не завершает уже запущенные fb_inet_server...

/opt/firebird/bin/gfix -shut -force 0 <my_db>
так правильно?
что произойдет в случае такого шатдауна с процессом, занятым сборкой мусора?
Мне просто нужно корректно и без вопросов остановить классик.

jake
Сообщения: 16
Зарегистрирован: 24 фев 2005, 09:03

Сообщение jake » 09 мар 2005, 11:06

dimitr писал(а):Сервер не содержит обработчика SIGTERM, поэтому случиться может все, что угодно.
Не считаете ли вы, что такой обработчик необходим?
Допустим я завершаю работу сервера (init 0, poweroff, как угодно). Получается так, что работающие процессы классика никто корректно не остановит, и они будут именно убиты и, "случиться может всё, что угодно".
Вот что я нашел в скриптах своей системы (/etc/init.d/halt):

Код: Выделить всё

action "Sending all processes the TERM signal..." /sbin/killall5 -15
sleep 5
action "Sending all processes the KILL signal..."  /sbin/killall5 -9
Все процессы, не завершенные соответствующими скриптами запуска/останова просто убиваются. сначала по SIGTERM, потом по SIGKILL...
Т.е. даже в случае корректного завершения работы системы, база может оказаться поврежденной :-(

Я так понимаю, либо надо обработчик этот в самом сервере , либо в классике тоже делать скрипт /etc/init.d/firebird, который по stop будет делать что-то вроде gfix -shut ? либо и то и другое вместе?

спасибо.

dimitr
Разработчик Firebird
Сообщения: 888
Зарегистрирован: 26 окт 2004, 16:20

Сообщение dimitr » 11 мар 2005, 12:00

jake писал(а):Как тогда правильно остановить все процессы классика? Ведь остановка xinetd (/etc/init.d/xinetd stop) не завершает уже запущенные fb_inet_server...

/opt/firebird/bin/gfix -shut -force 0 <my_db>
так правильно?
Да. Полный шатдаун и после его завершения отстрел всех процессов классика. Сборка мусора будет остановлена шатдауном.

dimitr
Разработчик Firebird
Сообщения: 888
Зарегистрирован: 26 окт 2004, 16:20

Сообщение dimitr » 11 мар 2005, 12:03

jake писал(а):Не считаете ли вы, что такой обработчик необходим?
Допустим я завершаю работу сервера (init 0, poweroff, как угодно). Получается так, что работающие процессы классика никто корректно не остановит, и они будут именно убиты и, "случиться может всё, что угодно".
Считаю, что необходим. Но больше для порядка/удобства, чем для целостности базы. Ибо она никогда не должна портиться при убитии сервера. То, что сейчас изредка наблюдается, я считаю багом, который рано или поздно будет изничтожен.

jake
Сообщения: 16
Зарегистрирован: 24 фев 2005, 09:03

Сообщение jake » 11 мар 2005, 12:13

>dimitr
Спасибо за разъяснения.

Ответить