我有一个守护进程,为此,我需要检查状态并查看它是上升还是下降。截至目前,我正在使用expect脚本telnet到端口,看看它是否还活着。我想用perl重写它,检查一下。我非常感谢任何指向我可以使用的模块或功能的指针。
答案 0 :(得分:3)
http://metacpan.org/pod/IO::Socket::PortState 这将是一个很好的起点。可能有更好的解决方案,但这就是我正在使用的。
答案 1 :(得分:0)
为了快速检查单个端口,Net::EmptyPort
提供了check_port
,或者它很简单,可以使用IO::Socket::IP
自行完成。两者都比仅使用IO::Socket::PortState
一个端口(它将自己的接口描述为“复杂”)要麻烦得少。
使用Net::EmptyPort
:
use Net::EmptyPort qw<check_port>;
if (check_port 5432)
{
# ...
}
但是,如果你看看它在做什么,你可以决定自己可以像以下那样轻松地建立套接字连接:
use IO::Socket::IP;
my $socket = IO::Socket::IP->new(PeerAddr => 'localhost', PeerPort => 5432);
if ($socket)
{
$socket->close;
# ...
}
这也允许您提供其他参数,例如Timeout
来调整放弃之前等待的时间并确定端口未被使用。对于localhost
,您可以使用默认值更短的超时时间;我已经毫无问题地使用了100毫秒。