如何将node.js应用程序作为后台服务运行?
如何将node.js应用程序作为后台服务运行?
由于这篇文章多年来引起了很多关注,我已经在本文底部列出了每个平台的最佳解决方案。
原始文章:
我希望我的node.js服务器在后台运行,即:当我关闭终端时,我希望服务器仍在运行。我谷歌了一下,找到了这个教程,但它没有按预期工作。因此,我想换一种方法,使用输出重定向(2>&1 >> file
),但这也没有退出——我在终端中得到一个空行,就像它在等待输出/错误。
我还尝试将进程放到后台运行,但是一旦我关闭终端,进程也会被杀死。
那么,当我关闭本地计算机时,如何使它继续运行?
最佳解决方案:
- Systemd(Linux)
- Launchd(Mac)
- node-windows(Windows)
- PM2(Node.js)
admin 更改状态以发布 2023年5月21日
从如何将Node.js应用程序作为其自己的进程运行?复制我的答案
2015年的答案:几乎每个Linux发行版都带有systemd,这意味着forever、monit、PM2等不再必要——您的操作系统已经处理了这些任务。
创建一个myapp.service
文件(显然用您的应用程序名称代替'myapp'):
[Unit] Description=My app [Service] ExecStart=/var/www/myapp/app.js Restart=always User=nobody # Note Debian/Ubuntu uses 'nogroup', RHEL/Fedora uses 'nobody' Group=nogroup Environment=PATH=/usr/bin:/usr/local/bin Environment=NODE_ENV=production WorkingDirectory=/var/www/myapp [Install] WantedBy=multi-user.target
如果您是Unix的新手,请注意:/var/www/myapp/app.js
应该在第一行上有#!/usr/bin/env node
,并且具有可执行模式chmod +x app.js
。
将服务文件复制到/etc/systemd/system
中。
使用systemctl start myapp
启动它。
启用它在启动时运行systemctl enable myapp
。
使用journalctl -u myapp
查看日志
本文节选自我们如何在Linux上部署Node应用程序,2018年版,其中还包括生成用于构建Linux/node服务器(包括.service
文件)的AWS/DigitalOcean/Azure CloudConfig的命令。