如何在Ubuntu服务器上将Node.js脚本作为后台服务运行?
我之前也遇到过类似的困扰——Node.js脚本后台运行的配置总是踩坑,给你几个亲测有效的方案,应该能解决你的问题:
方案1:使用systemd(Ubuntu官方推荐的稳定方案)
很多时候之前配置失败都是因为.service文件的细节没处理好,我给你一个经过验证的标准配置模板:
- 创建服务配置文件:
sudo nano /etc/systemd/system/mongo-crm-sync.service - 粘贴以下配置(一定要替换成你自己的路径和用户名):
[Unit] Description=MongoDB与CRM实时同步服务 After=network.target mongod.service # 如果你的脚本依赖MongoDB服务,保留这行;否则可以删除 [Service] Type=simple User=ubuntu # 替换成你的服务器用户名,比如常用的ubuntu WorkingDirectory=/home/ubuntu/sync-scripts # 脚本所在的目录路径 ExecStart=/usr/bin/node /home/ubuntu/sync-scripts/sync.js # Node的绝对路径(用`which node`可查询)+ 脚本绝对路径 Restart=always # 脚本崩溃后自动重启 RestartSec=5 # 崩溃后5秒再重启 Environment=NODE_ENV=production # 可选,设置生产环境变量 [Install] WantedBy=multi-user.target - 保存退出后,重新加载systemd配置:
sudo systemctl daemon-reload - 启动服务:
sudo systemctl start mongo-crm-sync - 设置开机自启:
sudo systemctl enable mongo-crm-sync - 查看服务状态或实时日志:
sudo systemctl status mongo-crm-sync # 或者实时查看日志 journalctl -u mongo-crm-sync -f
如果之前配置失败,大概率是路径写错或者权限问题,记得给脚本和目录设置正确的权限:
chown your-username:your-username /path/to/your/script.js
方案2:使用PM2(Node.js专用进程管理器)
PM2对Node.js项目的管理非常友好,自带日志管理、自动重启、负载均衡等功能,上手成本极低:
- 全局安装PM2:
sudo npm install pm2 -g - 进入脚本所在目录,启动脚本并命名:
pm2 start sync.js --name "mongo-crm-sync" - 设置PM2开机自启,按照终端提示执行生成的命令:
pm2 startup ubuntu - 保存当前PM2进程列表,确保重启后自动恢复:
pm2 save - 查看服务状态或日志:
pm2 status # 查看指定服务的实时日志 pm2 logs mongo-crm-sync
我自己的大部分Node.js后台服务都是用PM2管理的,几乎没出过问题,非常推荐。
方案3:使用nohup + screen(临时应急方案)
如果只是临时测试脚本,或者不想配置服务/进程管理器,可以用这个组合,缺点是服务器重启后需要手动重启脚本:
- 先安装screen:
sudo apt install screen - 创建一个新的screen会话:
screen -S sync-session - 在会话中启动脚本(nohup会让脚本忽略挂起信号):
nohup node sync.js & - 按
Ctrl+A再按D退出会话,脚本会在后台持续运行 - 重新进入会话查看脚本状态:
screen -r sync-session - 查看脚本输出日志:
cat nohup.out
几个关键注意点
- 先在前台测试
node sync.js,确保脚本本身能正常运行,没有数据库连接错误或代码报错 - 确认服务器能正常访问MongoDB和CRM数据库(比如防火墙规则、内网权限等)
- 如果CRM数据库需要特定的环境变量,记得在systemd配置或PM2启动时设置好
内容的提问来源于stack exchange,提问作者sangaloma
相关产品推荐
相关产品推荐

