如何在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
相关产品推荐
相关产品推荐

