当前位置: 首页 > 知识库问答 >
问题:

Perl Net::SFTP::Foreign disconnect未关闭连接

刘瀚
2023-03-14

在调用$sftp->disconnect()时,连接不会关闭,Perl脚本处于挂起状态,直到我手动终止进程。

my %sftp_args = ( user => $username, autodie => 1, stderr_discard => 1,more => qw(-v),
                    timeout => $timeout_secs,ssh_cmd => $SSH_PATH );

  my $sftp = Net::SFTP::Foreign->new($remote_host, %sftp_args);
$sftp->disconnect();
 eval {

    local $SIG{ALRM} = sub { die "alarm\n" };
    alarm 25;
    my $retrun = $sftp->disconnect();
    alarm 0;
  };
  my $exception = $@;
  msg("Error Dump".Dumper($exception));
}

下面是我在nohup.out文件中得到的错误。

bash: line 1: 27860 Alarm clock   sftp_connection.pl 

共有1个答案

宰父浩漫
2023-03-14

在对net::sftp::foreign模块进行分析后,我找到了解决方案。下面是net::sftp::foreign模块有一个bug的详细信息,我在perldoc中找到了这个:

On some operating systems, closing the pipes used to communicate  the 
slave SSH process does not terminate it and a work around has to be applied. 
If you find that your scripts hung when the $sftp object gets out of scope,
try setting $Net::SFTP::Foreign::dirty_cleanup to a true value

根据上面的评论,我对我的应用程序进行了修改,现在它运行良好:

my %sftp_args = ( user => $username, autodie => 1, stderr_discard => 1,
                  timeout => $timeout_secs, ssh_cmd => $SSH_PATH, dirty_cleanup => 1 );

my $sftp = Net::SFTP::Foreign->new($remote_host, %sftp_args);
return $sftp;
 类似资料:
  • 给出错误的方法如下: 如何创建一个没有泄漏的连接?为什么Hikari认为我的conn.close()方法没有关闭连接?任何想法都很欣赏。

  • 版本 上下文 我只是想在核心示例io中运行http客户端。维特斯。实例果心http。易于理解的客户运行此示例时,its发现已建立的连接在请求完成后未关闭。 服务器端我没有看到任何问题。因为在尝试使用jmeter和服务器时,它工作得很好。所以我认为问题在于HttpClient。 有人能帮我吗? 提前谢谢。复制的步骤 额外的 即使在请求和响应结束后,仍会显示以下内容。在给LINUX 窗户 在LINUX

  • 我有一个带有数据库连接池的grails/groovy web应用程序。设置如下所示: 我使用java melody进行诊断和监控,并注意到一些奇怪的行为。例如,当执行查询数据库的作业时,连接可以超越maxActive属性。为什么这是可能的? 我需要显式关闭Grails连接吗?该作业调用一个服务方法,该方法通过withCriteria Grails调用简单地执行DB查询,如: 似乎每次运行这个程序,

  • 我正在使用DBCP连接池,并创建了一个MBean来在Jconsole中显示连接池的统计信息。我观察到的是,即使应用程序上没有活动(意味着没有页面点击等),连接池统计数据也会显示活动连接。 我们在上面看到的16个虚拟连接并没有降到零。我不知道为什么?有人能解释一下吗? 谢谢

  • 我将spring data mongodb(1.7.0.RELEASE)与spring webmvc框架一起用于我的web应用程序。我使用mongoRepository使用基本的CRUD函数,但我没有在代码中关闭mongo连接,因为我以为spring data mongodb会自己关闭它,但它会继续打开新连接,而不是关闭它们。这些太多的连接导致我的应用程序崩溃,我必须一次又一次(每天两次)重新启动

  • 我正在尝试使用Springboot反应式webclient进行HTTP调用。远程服务器错误导致连接关闭。 请查找以下使用Webclient进行rest调用的代码。 Webclient创建的代码: 第一次通话后,我收到以下日志: 当我在一段时间后(比如10分钟)拨打电话时,连接将变为非活动状态。我正在获取以下日志: 我发现连接没有正确返回到池。配置中是否缺少任何内容?我是否已正确关闭连接?我想这应该