如何将node.js应用程序作为后台服务运行?

由于这篇文章多年来引起了很多关注,我在这篇文章的底部列出了每个平台的顶级解决方案。


原文

我想让我的node.js服务器在后台运行,即:当我关闭我的终端时,我希望我的服务器继续运行。 我已经使用了这个教程,并提出了本教程,但它不能按预期工作。 所以不是使用这个守护进程脚本,我认为我只是使用了输出重定向( 2>&1 >> file部分),但是这个也不会退出 - 我的终端里有一个空行,就像等待输出/错误。

我也试图把这个过程放在后台,但是一旦我关闭了终端,这个过程也会被终止。

那么当我关闭本地计算机时,如何让它继续运行?


顶级解决方案

  • Systemd(Linux)
  • 启动(Mac)
  • 节点窗口(Windows)
  • PM2(Node.js)

  • 从我如何运行Node.js应用程序作为自己的进程复制我自己的答案?

    2015答案 :几乎每个Linux发行版都附带了systemd,这意味着永远不会再需要monit等 - 您的操作系统已经可以处理这些任务

    制作一个myapp.service文件(显然,用您的应用程序的名称替换“myapp”):

    [Unit]
    Description=My app
    
    [Service]
    ExecStart=/var/www/myapp/app.js
    Restart=always
    User=nobody
    # Note RHEL/Fedora uses 'nobody', Debian/Ubuntu uses 'nogroup'
    Group=nobody  
    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

    将你的服务文件复制到/etc/systemd/system

    systemctl start myapp启动它。

    使其能够在systemctl enable myapp启动时运行。

    使用journalctl -u myapp查看日志

    更多详情请见: 我们如何在Linux上部署节点应用程序,2018年版


    您可以使用Forever,一个简单的CLI工具来确保给定节点脚本连续运行(即永远):https://www.npmjs.org/package/forever


    更新 - 正如在下面的答案之一中提到的,PM2有一些非常好的功能从永远丢失。 考虑使用它。

    原始答复

    使用nohup:

    nohup node server.js &
    

    编辑我想补充说,接受的答案是真的要走的路。 我永远在需要熬夜的实例上使用。 我喜欢npm install -g forever执行npm install -g forever因此它在节点路径中,然后forever start server.js

    链接地址: http://www.djcxy.com/p/48469.html

    上一篇: How do I run a node.js app as a background service?

    下一篇: Spring MVC / Simple Post request does not work