在Linux环境中直接通过node命令启动nodejs应用,进程会绑定当前终端会话,一旦终端关闭或者SSH连接断开,进程就会被系统终止,因此需要通过特定方式让nodejs应用在后台持续运行。

基础方法:使用nohup命令
nohup是Linux系统自带的命令,作用是让进程忽略HUP挂断信号,从而实现后台运行,适合临时测试或者简单场景使用。
操作步骤
在nodejs应用所在目录执行以下命令:
# 后台启动nodejs应用,日志输出到nohup.out文件 nohup node app.js > nohup.out 2>&1 &
命令参数说明:
> nohup.out:将标准输出重定向到nohup.out文件2>&1:将错误输出合并到标准输出,一起写入日志文件&:让进程在后台运行
进程管理相关命令
查看后台运行的nodejs进程:
ps -ef | grep node
停止进程时,找到对应的进程ID后执行:
kill -9 进程ID
这种方法的缺点是进程没有自动重启能力,应用崩溃后需要手动重新启动,也不方便管理多个nodejs应用。
常用工具:使用pm2管理进程
pm2是专门为nodejs应用设计的进程管理工具,支持自动重启、负载均衡、日志管理、性能监控等功能,是生产环境最常用的方案。
安装pm2
首先确保已经安装nodejs和npm,然后全局安装pm2:
npm install -g pm2
启动和管理应用
启动nodejs应用:
# 启动应用,给应用命名为my-node-app pm2 start app.js --name my-node-app
常用pm2命令:
- 查看所有运行的应用:
pm2 list - 查看应用日志:
pm2 logs my-node-app - 重启应用:
pm2 restart my-node-app - 停止应用:
pm2 stop my-node-app - 删除应用:
pm2 delete my-node-app - 设置开机自启动:
pm2 startup,然后执行生成的对应命令即可
pm2会自动监控应用状态,当应用意外崩溃时会自动重启,也支持多应用统一管理,大幅降低了运维成本。
系统级方案:使用systemd配置服务
systemd是大多数现代Linux发行版自带的系统和服务管理器,通过配置systemd服务可以让nodejs应用成为系统服务,支持开机自启、状态监控、自动重启等能力,适合需要和系统深度集成的场景。
创建服务配置文件
在/etc/systemd/system/目录下创建服务文件,比如命名为node-app.service:
[Unit] Description=Node.js Application After=network.target [Service] Type=simple User=ubuntu WorkingDirectory=/home/ubuntu/node-app ExecStart=/usr/bin/node /home/ubuntu/node-app/app.js Restart=on-failure RestartSec=10 StandardOutput=append:/var/log/node-app/out.log StandardError=append:/var/log/node-app/err.log [Install] WantedBy=multi-user.target
配置参数说明:
User:运行应用的用户,避免使用root用户提升安全性WorkingDirectory:nodejs应用的工作目录ExecStart:启动应用的完整命令,node路径可以通过which node命令获取Restart=on-failure:应用异常退出时自动重启RestartSec:重启前等待的秒数
启动和管理服务
配置完成后执行以下命令:
# 重新加载systemd配置 sudo systemctl daemon-reload # 启动服务 sudo systemctl start node-app # 查看服务状态 sudo systemctl status node-app # 设置开机自启 sudo systemctl enable node-app
如果需要停止服务,执行sudo systemctl stop node-app即可。
方法对比和选择建议
| 方案 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| nohup命令 | 系统自带,无需额外安装,操作简单 | 无自动重启,管理不便 | 临时测试、简单脚本运行 |
| pm2工具 | 功能丰富,自动重启,多应用管理方便 | 需要额外安装,属于第三方工具 | 生产环境nodejs应用管理 |
| systemd服务 | 系统原生,集成度高,权限管控灵活 | 配置相对复杂,操作步骤较多 | 需要和系统服务统一管理、对安全性要求高的场景 |
开发者可以根据自身的应用规模和使用场景选择最合适的后台运行方案,确保nodejs应用稳定运行。