如何在后台运行程序?node.js应用如何无需保持终端开启运行
Node.js应用后台常驻运行实现方案
以下是不同场景下的可用方案:
1. 临时测试场景(无需额外安装工具,Linux/Unix适用)
- 可以使用系统自带的
nohup命令实现,原理是忽略终端挂断信号,避免进程随终端关闭被终止 - 基础启动命令:
nohup node 你的应用入口文件.js &,默认运行日志会输出到当前目录的nohup.out文件 - 自定义日志路径命令:
nohup node 你的应用入口文件.js > 自定义日志文件路径.log 2>&1 & - 停止应用步骤:先执行
ps aux | grep node查询对应进程的PID,再执行kill 进程PID终止进程即可
2. 生产环境首选方案(PM2进程管理工具)
- 这是专门针对Node.js生态的进程管理工具,除了后台运行外,还支持崩溃自动重启、日志管理、多实例负载均衡等功能
- 安装命令:
npm install pm2 -g - 基础启动命令:
pm2 start 你的应用入口文件.js - 常用操作命令:
- 查看所有运行中进程:
pm2 list - 查看应用实时日志:
pm2 logs 应用名称/进程ID - 重启应用:
pm2 restart 应用名称/进程ID - 停止应用:
pm2 stop 应用名称/进程ID - 删除应用进程:
pm2 delete 应用名称/进程ID
- 查看所有运行中进程:
- 配置开机自启:先执行
pm2 startup按照终端提示完成操作,再执行pm2 save保存当前运行的进程列表,系统重启后会自动恢复应用运行
3. Linux系统级服务方案(systemd)
- 无需安装第三方工具,直接把应用配置为系统服务,适合需要和系统能力深度整合的场景
- 首先在
/etc/systemd/system/目录下创建服务文件,命名为你的应用名.service,文件内容参考:
[Unit]
Description=自定义的Node.js应用描述
After=network.target[Service]
Type=simple
User=运行应用的系统用户名
WorkingDirectory=应用根目录的绝对路径
ExecStart=node程序的绝对路径 你的应用入口文件.js(可通过which node命令查询node的绝对路径)
Restart=always[Install]
WantedBy=multi-user.target
- 配置完成后执行以下命令生效:
- 重载系统服务配置:
systemctl daemon-reload - 启动应用服务:
systemctl start 你的应用名 - 开启开机自启:
systemctl enable 你的应用名 - 查看应用运行状态:
systemctl status 你的应用名 - 查看应用实时日志:
journalctl -u 你的应用名 -f
- 重载系统服务配置:
4. Windows系统方案
- 可使用winsw工具将Node.js应用封装为Windows系统服务,实现后台运行和开机自启
- 也可以直接安装Windows版本的PM2,操作逻辑和Linux环境完全一致
内容的提问来源于stack exchange,提问作者Avinish kumar
相关产品推荐
相关产品推荐

