You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Node.js服务器脚本异常终止时实现自动重启?

自动重启Node.js服务器的两种实用方案

针对你的IoT数据持久化服务器偶尔崩溃的问题,以下两种方案可以实现崩溃后自动重启,避免数据丢失:

方案1:基础兜底——内置异常监听+外部脚本

Node.js提供了全局异常监听事件,可以捕获未处理的同步异常和Promise拒绝,捕获后主动退出进程,再通过外部脚本循环重启:

1.1 在服务器脚本中添加异常监听

在你的服务器代码开头加入以下代码,捕获异常并做紧急清理后退出:

// 捕获未处理的同步异常
process.on('uncaughtException', (err) => {
  console.error('[崩溃原因] 未捕获同步异常:', err.stack);
  // 可选:执行紧急清理,比如关闭数据库连接、保存当前处理的临时数据
  process.exit(1); // 以非0状态码退出,让外部脚本触发重启
});

// 捕获未处理的Promise拒绝
process.on('unhandledRejection', (reason, promise) => {
  console.error('[崩溃原因] 未处理Promise拒绝:', reason);
  process.exit(1);
});

1.2 编写Shell重启脚本

创建一个restart-server.sh脚本:

#!/bin/bash
echo "启动IoT数据服务器..."
while true; do
  node your-server.js
  echo "服务器崩溃,3秒后自动重启..."
  sleep 3
done

赋予脚本执行权限并运行:

chmod +x restart-server.sh
./restart-server.sh

方案2:专业进程管理工具(推荐)

使用pm2这类成熟的Node.js进程管理器,它会自动监听进程状态,崩溃后立即重启,还支持日志管理、开机自启等功能:

2.1 安装pm2

npm install pm2 -g

2.2 启动并托管服务器

pm2 start your-server.js --name "iot-data-server"

2.3 常用pm2命令

  • 查看进程状态:pm2 status
  • 查看崩溃日志:pm2 logs iot-data-server
  • 设置开机自启:
    pm2 startup
    pm2 save
    

关键注意事项

  • 自动重启只是兜底方案,必须彻底修复引发崩溃的根源问题(比如数据库连接超时、未处理的边缘数据格式),否则频繁重启可能导致数据重复或丢失。
  • 对于IoT数据,建议先将接收的数据写入本地临时存储(比如本地文件、Redis缓存),再异步同步到数据库,避免进程崩溃时正在处理的数据丢失。

内容的提问来源于stack exchange,提问作者Ben

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 10:21:58