【问题标题】:How to check if PGSQL server is still alive with DBD::PG?如何使用 DBD::PG 检查 PGSQL 服务器是否仍然存在?
【发布时间】:2014-01-09 20:16:45
【问题描述】:

我正在拼命寻找一种简单的方法来定期检查 PGSQL 服务器是否仍然存在于 perl 脚本中。我打算为此使用pg_ping,但在我的测试中,pg_ping 总是返回 1,与数据库服务器状态无关。

这是我尝试过的代码:

#!/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-server,但结果仍然是1。我是不是做错了什么?

如果没有,我如何最好地检查数据库服务器是否还活着?

提前致谢。

【问题讨论】:

  • 来自手册:重要提示:最好不要使用SIGKILL来关闭服务器。这样做会阻止服务器释放共享内存和信号量,这可能必须在启动新服务器之前手动完成。此外,SIGKILL 会杀死 postgres 进程,而不会让它将信号传递给其子进程,因此也有必要手动杀死各个子进程。
  • 嗯,这就是我想要的。一种测试脚本是否意识到服务器/虚拟机崩溃的方法。崩溃通常不会发出信号。

标签: perl postgresql dbd-pg


【解决方案1】:

您可以手动执行查询

select 1 as is_alive

ping() 也声称做了类似的事情,

ping 方法发出一个空查询并检查结果状态。

【讨论】:

  • 感谢您的回答,似乎不起作用。我什至可以在 PGSQL 服务器被杀死时执行真正的查询,这看起来很可疑。我想我在某个地方犯了一个可怕的愚蠢错误。
  • @m3adow 你确定服务器真的死了吗?在 PID 上执行第二个kill,这反过来只会在服务器关闭时才抱怨。
  • 天哪,非常感谢。这确实是第 8 层问题。我只是部分杀死了 PGSQL。一切正常,我很笨。
猜你喜欢
  • 2013-11-14
  • 1970-01-01
  • 2011-11-05
  • 2015-02-21
  • 2021-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多