Nodejs 断开SSH 服务就退出了 怎么让它一直运行啊?

Nodejs 断开SSH 服务就退出了 怎么让它一直运行啊?

10 回复

当然可以。在Node.js中,如果你使用的是ssh2模块来创建SSH连接,并且希望即使断开了SSH连接或关闭了终端窗口,你的应用程序也能继续运行,你可以考虑以下几种方法。

方法1: 使用foreverpm2

这两个工具可以帮助你的Node.js应用在后台持续运行,即使你关闭了终端窗口。

安装forever

npm install -g forever

启动应用

forever start your-app.js

安装pm2

npm install -g pm2

启动应用

pm2 start your-app.js

方法2: 使用child_process.fork实现进程守护

你可以创建一个主进程来监控和重启子进程。当子进程因任何原因退出时,主进程会重新启动它。

主进程(master.js)

const { fork } = require('child_process');
let child;

function startChild() {
    child = fork('./your-app.js');
    child.on('exit', () => {
        console.log('Child process exited, restarting...');
        startChild();
    });
}

startChild();

示例代码:处理SSH连接的稳定性和持久性

假设你正在使用ssh2库来管理SSH连接:

安装ssh2

npm install ssh2

示例代码(your-app.js)

const Client = require('ssh2').Client;
const { fork } = require('child_process');

// 创建一个SSH客户端实例
const conn = new Client();

conn.on('ready', () => {
    console.log('SSH connection established.');
    // 连接成功后执行的操作
}).on('error', (err) => {
    console.error('SSH connection error:', err);
}).on('close', (had_error) => {
    console.log('SSH connection closed.', had_error ? 'With error.' : 'Normally.');
    // 重新连接
    setTimeout(() => {
        conn.connect({
            host: 'example.com',
            port: 22,
            username: 'user',
            password: 'password'
        });
    }, 5000); // 5秒后重试
}).connect({
    host: 'example.com',
    port: 22,
    username: 'user',
    password: 'password'
});

在这个例子中,我们设置了一个重连机制,如果SSH连接断开,程序将尝试在5秒后重新建立连接。结合上述的方法1或方法2,你的Node.js应用就能在断开SSH连接或关闭终端窗口后仍然保持运行。


node.js forever模块

感觉LZ需要的是这个

(node app &)

或者

nohup node app &

nohup node xxx.js > /tmp/log.txt 2>&1 &

这个只能Kill掉么?

我的0.10 .7 nodejs版本使用forever 不知道为什么运行不来

学习了

谢谢 这个确实非常棒

后台运行

要解决Node.js程序在断开SSH连接后退出的问题,可以使用nohup命令或者将你的Node.js应用程序设置为后台运行。此外,你也可以考虑使用进程管理工具如pm2来确保应用始终运行。

使用 nohup

nohup 命令可以让进程忽略挂起信号(SIGHUP),从而即使SSH会话断开,进程仍然可以继续运行。

示例

nohup node your_app.js &

这行命令会启动你的Node.js应用,并让其在后台运行。执行这行命令后,你可以在终端中看到输出被重定向到nohup.out文件。

使用 pm2

pm2 是一个非常强大的进程管理器,能够更好地管理Node.js应用程序。它能自动重启你的应用,保持日志等。

安装 pm2

npm install -g pm2

启动应用

pm2 start your_app.js

这样,pm2会自动将你的应用设置为后台运行,即使你关闭了SSH连接,应用也会继续运行。

示例代码:基本的Node.js应用

// your_app.js
const http = require('http');

const server = http.createServer((req, res) => {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('Hello World\n');
});

const port = process.env.PORT || 3000;
server.listen(port);

console.log(`Server running at http://localhost:${port}/`);

以上代码展示了一个简单的HTTP服务器,可以通过上述方法之一保持运行状态,即使SSH连接断开。

通过这些方法,你可以确保Node.js应用在断开SSH连接后依然保持运行。

回到顶部