Nodejs ssh2 exec执行shell超时终止执行

本文介绍如何解决SSH2模块执行远程Shell命令时遇到的超时问题。通过使用系统命令`timeout`配合SSH2模块,可以在指定时间内终止长时间运行的Shell命令,避免因机器负载高导致响应过慢。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用ssh2 模块执行shell的时候,只有在连接目标机器时,有个readyTimeout用于设置ssh连接目标机器的超时终止的参数。

conn.connect({
    host: ip,
    port: 22,
    username: user,
    password: password,
    readyTimeout: 5000
});

没有用于设置shell执行的超时的参数,但是我的shell命令在机器负载高的情况下返回时间需要很久很久,需要超过一定时间需要终止掉shell。
看了github别人提得issue也没有很好的解决办法,后来用了个取巧的办法如下

解决办法

方法也是蛮简单,结合系统提供的shell命令timeout
例子:

timeout 2s pwd
var Client = require('ssh2').Client;

var conn = new Client();
conn.on('ready', function() {
        var command = 'source ~/.bash_profile;timeout 2s pwd'
        conn.exec(command, function(err, stream) {
            if (err) throw err;
            stream.on('close', function(code, signal) {
                conn.end();
            }).on('data', function(data) {

            });
        });
    }).on('error', function(err) {

    })
    .connect({
        host: currentHost.host,
        port: currentHost.port,
        username: currentHost.username,
        password: currentHost.password
        readyTimeout: 5000
    });
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值