如何将Node.js服务器作为守护进程运行?

8

我正在使用Ionic框架和nodejs开发一个应用程序,所有的nodejs文件都在Linux服务器上。我使用Putty通过'npm start &'命令启动nodejs服务器。但是问题是,如果我关闭了Putty,服务器会在一段时间后停止运行。我尝试过使用'nohup npm start &',但仍然面临同样的问题。如何将其作为守护进程启动..?


将Node.js作为后台服务使用,可以使用以下命令:npm install -g forever 安装 forever 模块,然后运行 forever start server.js。这将帮助您在后台持续运行 Node.js 服务器。 - Shubham Batra
另一种方法是在屏幕上运行。 - slebetman
4个回答

15

你可以在生产环境中使用pm2

安装pm2:

npm install pm2 -g

要启动一个应用程序,只需运行:

pm2 start app.js

您可以通过以下方式查看日志:

pm2 logs

要了解更多选项,只需查看他们在github repo上的自述文件。


1
哇,这是一个令人难以置信的软件包。 - tensai

2

这是daemon模块的适配:

const child_process = require('child_process')

function child(exe, args, env) {
    const child = child_process.spawn(exe, args, { 
        detached: true,
        stdio: ['ignore', 'ignore', 'ignore'],
        env: env
    })
    child.unref()
    return child
}

module.exports = function(nodeBin) {
    console.log('Daemonize process')

    if (process.env.__daemon) {
        return process.pid
    }
    process.env.__daemon = true

    var args = [].concat(process.argv)
    var node = args.shift()
    var env = process.env
    child(node, args, env)
    return process.exit()
}

使用方法:

const daemon = require('daemon')
daemon()

app.listen(...)

https://wiki.unix7.org/node/daemon-sample


0

如果要创建真正的守护进程(一个不附加到任何tty的进程),您可以使用npm上提供的多个守护进程模块之一。

快速搜索给了我这个链接:https://www.npmjs.com/package/daemon

有趣的是,上面的模块使用纯JavaScript和Node.js内置模块工作,而不需要任何C扩展。它通过利用新版本的node(> 0.9)中的child_process的工作方式来实现。


0
  • 推荐使用PM2 / forever和nginx来有效地管理服务。
  • 或者您可以通过默认的操作系统服务运行。我在ec2-t2.micro上使用ubuntu 20.04 amd64,一切都预先安装了镜像。
# TO Run the service on port 80 as deamon thread
sudo PORT=80 nohup node server.js &

#To run the service on 3000 port and point to 80.
PORT=3000 nohup node server.js &
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3000

# to kill the process run 
ps -ef | grep "node"
kill -9 <pid>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接