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

Jer*_*NER 80 node.js

在Python Twisted中,您可以使用twistd命令帮助您完成与运行应用程序相关的许多事情(例如,将其守护进程).

如何守护node.js服务器,以便即使在当前会话关闭后它也可以运行?

谢谢你的帮助

Bag*_*ggz 88

永远是你的问题的答案.

安装

$ curl https://npmjs.org/install.sh | sh
$ npm install forever
# Or to install as a terminal command everywhere:
$ npm install -g forever
Run Code Online (Sandbox Code Playgroud)

用法

从命令行使用Forever

$ forever start server.js
Run Code Online (Sandbox Code Playgroud)

使用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();
Run Code Online (Sandbox Code Playgroud)

  • 应该使用-g选项来全局安装.可能需要权限才能这样做. (7认同)
  • 永远是死的,pm2是新的国王.请不要浪费你的时间永远.我刚刚换了,我就被吹走了.pm2可以通过一个简单的负载在所有核心上平衡你的应用程序.pm2启动app.js -i 0 - 名称"myapp"...哇...尝试它,你不会永远回头看...见@加里·伯尼茨回答 (6认同)
  • 我最终决定使用monit来启动和停止永久过程. (3认同)

小智 42

如果您需要您的进程来守护自身,而不是永远中继 - 您可以使用守护进程模块.

$ npm install daemonize2
Run Code Online (Sandbox Code Playgroud)

然后像在示例中一样编写服务器文件:

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]");
}
Run Code Online (Sandbox Code Playgroud)

请注意,这是一种低级别的方法.

  • 这听起来像是"如何启动node.js服务器作为守护进程"问题的更正确的答案. (2认同)
  • 你在app.js中放了什么?它马上就出来了. (2认同)
  • 重新启动时会发生什么? (2认同)

Hut*_*tch 18

更新:我更新了包括pm2的最新消息:

对于许多用例,使用systemd服务是管理节点进程的最简单和最合适的方法.对于那些在单个环境中运行大量节点进程或独立运行节点微服务的人来说,pm2是一个功能更全面的工具.

https://github.com/unitech/pm2

http://pm2.io

  • 它有一个非常有用的监控功能 - >非常'gui'用于命令行监控多个进程pm2 monit或使用进程列表pm2 list
  • 有组织的日志管理 - > pm2 logs
  • 其他的东西:
    • 行为配置
    • 源地图支持
    • PaaS兼容
    • 观看和重新加载
    • 模块系统
    • 最大内存重新加载
    • 群集模式
    • 热重装
    • 开发流程
    • 启动脚本
    • 自动完成
    • 部署工作流程
    • Keymetrics监控
    • API

  • 永远是死的,pm2是王!我一直在永远使用,但刚刚切换到pm2.哇!哇!哇!永远在1核心上运行你的应用程序,pm2可以做同样的事情或者它可以在所有可用核心上平衡你的应用程序.哇!不需要@reboot cron作业,只需执行pm2启动(将pm2作为systemd或OS等效服务启动)然后pm2保存.现在重新启动,您的应用仍在运行.您可以使用pm2 show获取正在运行的应用程序的状态.手表随时可用.哇!令人难以置信的哇! (2认同)

act*_*cay 17

要使用启动服务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
Run Code Online (Sandbox Code Playgroud)

请记住在每次更改.service文件后更新systemd守护程序

$ systemctl daemon-reload
Run Code Online (Sandbox Code Playgroud)

然后使用启动服务,并使服务在重新启动时启动

$ systemctl start myservice
$ systemctl enable myservice
Run Code Online (Sandbox Code Playgroud)


rai*_*ive 12

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

$ node server.js &
Run Code Online (Sandbox Code Playgroud)

然后你可以在以后杀死进程.我通常会做以下事情:

$ killall node
Run Code Online (Sandbox Code Playgroud)

注意:我正在运行OS X.

  • 请注意,如果您注销终端/ ssh会话,这将不起作用.完整的解决方案是nohup节点server.js>/dev/null 2>&1& (50认同)

张健健*_*张健健 6

你可以试试:

$ nohup node server.js &
Run Code Online (Sandbox Code Playgroud)

它适用于Mac和Linux.

输出将在./nohup.out文件中

但我仍然建议您使用pm2forever,因为它们很容易用于重新启动,停止和记录.