Nodejs 断开SSH 服务就退出了 怎么让它一直运行啊?
Nodejs 断开SSH 服务就退出了 怎么让它一直运行啊?
当然可以。在Node.js中,如果你使用的是ssh2
模块来创建SSH连接,并且希望即使断开了SSH连接或关闭了终端窗口,你的应用程序也能继续运行,你可以考虑以下几种方法。
方法1: 使用forever
或pm2
这两个工具可以帮助你的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连接后依然保持运行。