我有一个守护进程,我需要检查它的状态,看看它是打开还是关闭。到目前为止,我正在使用一个expect脚本telnet到端口,看看它是否是活的。我期待着用Perl重写它,以检查相同的。任何指向模块或功能的指针,我可以使用非常感谢。
yr9zkbsy1#
http://metacpan.org/pod/IO::Socket::PortState将是一个很好的开始。可能有更好的解决方案,但这是我正在使用的。
anauzrmj2#
为了快速检查单个端口,Net::EmptyPort提供了check_port,或者使用IO::Socket::IP自己检查也很简单,两者都比只对一个端口使用IO::Socket::PortState(它将自己的接口描述为“复杂”)要简单。对于Net::EmptyPort:
Net::EmptyPort
check_port
IO::Socket::IP
IO::Socket::PortState
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,以调整在放弃并确定端口未被使用之前等待的时间。我使用了100 ms,没有问题。
Timeout
2条答案
按热度按时间yr9zkbsy1#
http://metacpan.org/pod/IO::Socket::PortState将是一个很好的开始。可能有更好的解决方案,但这是我正在使用的。
anauzrmj2#
为了快速检查单个端口,
Net::EmptyPort
提供了check_port
,或者使用IO::Socket::IP
自己检查也很简单,两者都比只对一个端口使用IO::Socket::PortState
(它将自己的接口描述为“复杂”)要简单。对于
Net::EmptyPort
:但是如果您查看一下它的工作,您可能会决定自己也可以轻松地进行套接字连接,方法沿着:
这还允许您提供其他参数,例如
Timeout
,以调整在放弃并确定端口未被使用之前等待的时间。我使用了100 ms,没有问题。