服务器上的 Node.js 程序怎样保证在重启时正常运行?
服务器上的 Node.js 程序怎样保证在重启时正常运行?
用 forever
管理一般很不错了, 可有时服务器不小心或者 VPS 就被意外重启了…
遇到这种情况, forever
有没有恢复的方案? 或者搭配别的软件来重启应用的?
服务器上的 Node.js 程序怎样保证在重启时正常运行?
在生产环境中,确保 Node.js 应用程序在服务器重启后能够自动恢复运行是非常重要的。虽然 forever
是一个常用的解决方案,可以管理 Node.js 应用程序并确保它们在意外退出时重新启动,但在服务器整体重启的情况下,可能需要更全面的解决方案。
使用 PM2 进行进程管理
PM2
是另一个强大的进程管理工具,它不仅可以管理单个 Node.js 进程,还能管理整个集群,并提供日志管理和监控功能。PM2 在处理服务器重启时表现得更加稳定和可靠。
安装 PM2:
npm install -g pm2
使用 PM2 启动 Node.js 应用程序:
pm2 start app.js
配置 PM2 在系统启动时自动启动应用程序:
pm2 startup
执行上述命令后,PM2 会生成一条命令,你需要将这条命令复制并粘贴到终端中执行,以设置 PM2 在系统启动时自动启动你的应用程序。
保存 PM2 进程列表以便于恢复:
pm2 save
这一步骤非常重要,因为它确保了在系统重启后,PM2 能够恢复之前保存的进程列表并重新启动这些进程。
示例代码
假设你有一个简单的 Node.js 应用程序 (app.js
),内容如下:
const http = require('http');
const hostname = '127.0.0.1';
const port = 3000;
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hello World\n');
});
server.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});
使用 PM2 管理这个应用程序的步骤如下:
- 安装 PM2:
npm install -g pm2
- 启动应用程序:
pm2 start app.js
- 设置 PM2 自动启动:
pm2 startup
- 保存 PM2 进程列表:
pm2 save
通过以上步骤,你可以确保你的 Node.js 应用程序在服务器重启后能够自动恢复运行。
linux系统启动完毕之后会运行 /etc/rc.d/rc.local 的脚本 你编辑一下这个文件 加上你要运行的命令就可以了,有的系统在/etc/rc.local。 或者在/etc/init.d/里面写一个服务脚本,不过会麻烦些,具体的请问google把
前一条知道的, 就是觉得管理起来不方便, 也有过卡在这个位置的经历… 服务脚本… 其实我想找个方便的方案, 没的话只能去学下配置成服务了
Ubuntu的话可以使用upstart,非常方便。
谢. 想不到还有文档, 我去看看
为了确保在服务器重启时 Node.js 应用能够自动重启并恢复正常运行,可以使用 pm2
这样的进程管理工具。pm2
不仅能自动重启你的应用,还能帮助你更好地管理日志、监控等。
以下是如何使用 pm2
的步骤:
- 首先,你需要在你的服务器上安装
pm2
。如果你还没有安装 Node.js 和 npm,也需要一并安装。
npm install -g pm2
- 安装完成后,你可以使用
pm2
启动你的 Node.js 应用。假设你的应用文件名为app.js
,你可以通过以下命令启动它:
pm2 start app.js
- 为了确保即使服务器重启后也能自动启动你的应用,你可以让
pm2
在系统启动时运行。这可以通过保存当前的进程列表到pm2
的启动脚本来实现:
pm2 save
然后,你可以生成并安装启动脚本:
pm2 startup
执行上述命令后,系统会提示你运行一条命令来设置开机自启。复制并粘贴那条命令即可完成设置。
- 为了确保即使服务器意外重启,你的应用也能自动重启,
pm2
已经默认设置了这种机制。但如果你想要进一步定制行为(比如当内存或CPU使用率超过一定阈值时重启),可以在启动时指定这些选项:
pm2 start app.js --max-memory-restart 100M
这样,如果 Node.js 应用占用的内存超过100MB,pm2
将自动重启该应用。
总之,使用 pm2
能够非常方便地确保你的 Node.js 应用即使在服务器意外重启的情况下也能自动恢复并继续运行。