如何将node.js服务器作为守护进程启动?

new9mtju  于 2022-11-22  发布在  Node.js
关注(0)|答案(9)|浏览(160)

在Python Twisted中,twistd命令可以帮助你做一些与运行应用程序相关的事情(例如,将其守护)。
如何守护一个node.js服务器,使其即使在当前会话关闭后也能运行?

vyswwuz2

vyswwuz21#

Forever是您问题答案

安装

$ curl https://npmjs.org/install.sh | sh
$ npm install forever
# Or to install as a terminal command everywhere:
$ npm install -g forever

用法

从命令行使用Forever

$ forever start server.js

使用来自Node.js的Forever示例

var forever = require('forever');

  var child = new forever.Forever('your-filename.js', {
    max: 3,
    silent: true,
    args: []
  });

  child.on('exit', this.callback);
  child.start();
vwkv1x7d

vwkv1x7d2#

如果你需要你的进程守护自己,而不是永远依赖-你可以使用daemonize模块。

$ npm install daemonize2

然后编写服务器文件,如下所示:

var daemon = require("daemonize2").setup({
    main: "app.js",
    name: "sampleapp",
    pidfile: "sampleapp.pid"
});

switch (process.argv[2]) {

    case "start":
        daemon.start();
        break;

    case "stop":
        daemon.stop();
        break;

    default:
        console.log("Usage: [start|stop]");
}

提醒你一下,这是一个相当低级的方法。

flseospp

flseospp3#

要启动systemd服务管理器守护进程,请编写一个服务文件。例如,创建一个文件/etc/systemd/system/myservice.service

[Unit]
Description=myservice-description
After=network.target

[Service]
ExecStart=/opt/myservice-location/src/node/server.js --args=here
Restart=always
User=me
Group=group
Environment=PATH=/usr/bin:/usr/local/bin
Environment=NODE_ENV=production
WorkingDirectory=/opt/myservice-location

[Install]
WantedBy=multi-user.target

请确保安装server.js(或者您执行的任何主文件),或者考虑通过在服务文件的ExecStart=属性中提供完整的绝对路径来添加您要使用的node可执行文件。

#!/usr/bin/env node
// here is the content of the file "server.js"
...

记住在每次更改myservice.service文件后更新服务管理器守护进程。

$ systemctl daemon-reload

然后启动服务运行并使服务在 Boot 时启动。

$ systemctl start myservice
$ systemctl enable myservice
g6baxovj

g6baxovj4#

UPDATE:i已更新以包括pm2的最新内容:

对于许多使用案例,使用systemd服务是管理节点进程最简单、最合适的方法。对于在单个环境中运行多个节点进程或独立运行节点微服务的使用案例,pm2是功能更全面的工具。
https://github.com/unitech/pm2
http://pm2.io

  • 它有一个非常有用的监视特性-〉漂亮的“gui”,用于使用pm2 monit命令行监视多个进程或使用pm2 list监视进程列表
  • 有组织的日志管理-〉pm2 logs
  • 其他材料:
  • 行为配置
  • 源Map支持
  • PaaS兼容
  • 观看并重新加载
  • 模块系统
  • 最大内存重新加载
  • 丛集模式
  • 热重新加载
  • 开发工作流程
  • 启动脚本
  • 自动完成
  • 部署工作流
  • 关键度量监视
  • 美国石油学会
lb3vh1jj

lb3vh1jj5#

最简单的方法就是将命令发送到后台。

$ node server.js &

然后您可以在稍后的时间杀死进程。我通常会执行以下操作:

$ killall node

:我运行的是OS X。

mcvgt66p

mcvgt66p6#

您可以尝试:

$ nohup node server.js &

它在Mac和Linux上对我都有效。
输出将位于./nohup.out文件中
但我仍然建议您使用pm2forever,因为它们很容易用于重新启动、停止和日志记录。

dffbzjpn

dffbzjpn7#

还有更高级的通用转轮,如monitrunit

vjrehmav

vjrehmav8#

要了解在POSIX系统上使用守护进程的常规方法的背景,您可以搜索C方法。
我在node.js API中没有看到足够的方法来允许用C语言手工完成它。但是,当使用child_process时,可以让node.js为您完成它:
http://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options
我认为这是一种潜在的时间浪费,因为您的系统很有可能提供相同的功能。
例如:
http://libslack.org/daemon/manpages/daemon.1.html
如果你想要一些可移植的(跨平台),其他帖子提供的解决方案可能就足够了。

uttx8gqw

uttx8gqw9#

2022 -可吸入颗粒物2

有一个更好的解决方案,也是最流行的解决方案之一,它被称为pm2npm package link)。
要运行一个或多个Node.js服务器,您需要安装它:npm install pm2 -g
要运行:pm2 start app.js
停止:pm2 stop nameOfAppFromList
您还可以列出您正在运行的应用程序pm2 list
要检查特定日志,请运行pm2 logs nameOfAppFromList

相关问题