perl Net::SSH2 通道执行超时

Posted

技术标签:

【中文标题】perl Net::SSH2 通道执行超时【英文标题】:perl Net::SSH2 channel exec timeout 【发布时间】:2011-04-08 06:49:36 【问题描述】:

我正在使用 Net::SSH2 在远程主机上运行慢速管理命令。

Perl 5.8.8 libssh2 1.2.2

我在频道 exec 上不断收到奇怪的“超时”。 $chan->exec( $command );

正在执行的命令通常运行长达一个小时(60 分钟),在执行期间输出最少。

短命令可以正常工作。 大约一分钟后,输出最小的慢速返回 1。

我已将套接字设置为阻塞并将超时设置为 60 分钟等等......没有任何帮助。

有什么想法吗?

【问题讨论】:

【参考方案1】:

在 Net::SSH2 中使用“nohup command &”运行命令,然后通过检查生成程序的状态来保持连接。

有关更多信息,请参阅以下主题:

http://www.perlmonks.org/index.pl?node_id=868377

【讨论】:

我希望通过 libssh 或套接字上的最坏情况来解决这个问题。被调用应用程序的工作方式,我不能依赖这种进程监控。 它不需要进行状态检查,只要你通过套接字推送东西就可以了,或者你可以修改执行的命令以每隔几秒输出一些东西,或者使用线程或使用 fork(),此时我只是在扔东西。

以上是关于perl Net::SSH2 通道执行超时的主要内容,如果未能解决你的问题,请参考以下文章

使用通道超时

perl Net::SSH2::channel 的问题

需要通过 SSH1 和 SSH2 从 Perl 脚本连接机器

Perl,Parallel::ForkManager - 如何实现 fork 超时

Perl获取用户输入超时

perl Socket接收超时设置