2014-01-09 3 views
0

Я отчаянно пытаюсь найти простой способ регулярной проверки, если PGSQL-сервер все еще жив изнутри perl-скрипта. Я намеревался использовать для этого pg_ping, но в моих тестах pg_ping всегда возвращает 1, независимо от состояния сервера БД.Как проверить, жив ли PGSQL-сервер с DBD :: PG?

Вот код, который я попробовал это:

#!/usr/bin/perl 
use strict; 
use warnings; 
use DBD::Pg; 

my $dbh=DBI->connect("DBI:Pg:dbname=healthcheck;host=vm0484","healthcheck","areyoustillthere"); 
for (my $i=1;$i<100;$i++) { 
print "$i. pg_ping: ".$dbh->pg_ping."\n"; 
sleep(1); 
} 

Затем я использовал kill -9 в другом окне, чтобы вручную завершить PGSQL-сервер, но результат был еще 1. Я сделал что-то не так?

Если нет, то как лучше всего проверить, жив ли сервер БД?

Заранее спасибо.

+0

Из руководства: _Important: Лучше не использовать SIGKILL для закрытия сервера. Это приведет к тому, что сервер не выпустит разделяемую память и семафоры, которые затем могут быть выполнены вручную до запуска нового сервера. Кроме того, SIGKILL убивает процесс postgres, не позволяя ему передавать сигнал на свои подпроцессы, поэтому необходимо также вручную убить отдельные подпроцессы. –

+0

Ну, это то, чего я хотел. Способ проверить, реализует ли скрипт, что сервер/виртуальная машина разбилась. Сбой обычно не SIGINT. – m3adow

ответ

2

Вы можете вручную выполнить запрос как

select 1 as is_alive 

, как ping() также утверждают, что сделать что-то подобное,

Метод пинг выдает пустой запрос и проверяет статус результата.

+0

Спасибо за ваш ответ, похоже, не работает. Я даже могу выполнять реальные запросы, когда PGSQL-сервер был убит, что кажется довольно подозрительным. Я думаю, что я делаю ужасную глупую эру где-то. – m3adow

+0

@ m3adow Вы уверены, что сервер действительно мертв? Выполняйте второй «kill» на PID, который, в свою очередь, должен жаловаться только в том случае, если сервер не работает. –

+0

О, мужик, спасибо большое. Это было ДЕЙСТВИТЕЛЬНО проблемой уровня 8. Я только частично убил PGSQL. Все отлично работает, и я тупой. – m3adow

Смежные вопросы