如何自动重启节点应用?

时间:2016-04-05 05:05:24

标签: node.js loopbackjs

我正在运行一个节点strongloop应用程序,如果它崩溃,需要自动重启。自动重启节点应用程序的最佳方法是什么?当这些崩溃发生时,还有通知吗?

6 个答案:

答案 0 :(得分:5)

您可以使用Strongloop流程管理器(http://strong-pm.io/),PM2(http://pm2.keymetrics.io/)和Forever(https://github.com/foreverjs/forever)等流程管理器。还要检查这三者的比较(http://strong-pm.io/compare/)。您还可以检查pm2-monitor(https://www.npmjs.com/package/pm2-monitor)以获取通知以及服务器重启。

答案 1 :(得分:3)

大多数Linux系统最近都转而使用systemd,这使得这个过程更加简单和高效,并且意味着我们不再需要永远。

您只需要:

  1. 创建服务文件/etc/systemd/system/nodeserver.service

  2. systemctl enable nodeserver.service启用服务。

  3. systemctl start nodeserver.service启动服务。

  4. 您始终可以通过运行以下命令来检查其可用性: systemctl status nodeserver.service

    如果您对服务文件进行了任何更改,则需要在重新加载服务systemctl daemon-reload之前执行systemctl restart nodeserver.service

    .service文件的示例:

    [Unit]
    Description=Node.js Example Server
    #Requires=After=mysql.service       # Requires the mysql service to run first
    
    [Service]
    ExecStart=/usr/local/bin/node /opt/nodeserver/server.js
    Restart=always
    RestartSec=10                       # Restart service after 10 seconds if node service crashes
    StandardOutput=syslog               # Output to syslog
    StandardError=syslog                # Output to syslog
    SyslogIdentifier=nodejs-example
    #User=<alternate user>
    #Group=<alternate group>
    Environment=NODE_ENV=production PORT=1337
    
    [Install]
    WantedBy=multi-user.target
    

    顺便提一下StrongLoop中有关于最佳做法的官方文章,并提及了systemdRead more.

    另外,您可能希望看看由strongloop家伙为nodejs和strongloop构建的这个模块:https://github.com/strongloop/strong-service-systemd

答案 2 :(得分:1)

(假设您的应用程序在Linux上运行)您可以随时编写服务以确保应用程序正在运行,并在必要时重新启动。以下是编写服务的方法:

http://www.netzmafia.de/skripten/unix/linux-daemon-howto.html

答案 3 :(得分:1)

答案 4 :(得分:1)

我正在使用init.d来保持每次服务器重启时启动,您可以阅读此页面http://www.slidequest.com/q/70ang,它几​​乎涵盖了所有内容,或者Ghost在这里有很好的示例https://github.com/TryGhost/Ghost-Config/blob/master/init.d/ghost

然后,您可以update-rc.d yourapp defaults注册并启用它,并通过startstop等控制它。

我正在使用monit观看内容,并没有遇到任何麻烦,所以我不能说是好还是不好。你可以阅读它at digitalocean

答案 5 :(得分:1)

PM2永远是管理节点流程的好方法。 PM2将提供友好的图形界面,以便您轻松获取CPU /内存/日志。

在这里,我提出了另一个有趣的想法:Docker。

您可以使用docker hub

中的docker image构建运行时环境

运行它:

docker run -it [node images] node [your script.js]

您可以使用restart参数管理流程的生命周期。

Docker支持以下重启策略:

  1. [无] 退出时不要自动重启容器。这是默认的
  2. [失败] 仅当容器以非零退出状态退出时才重新启动。 (可选)限制Docker守护程序尝试的重新启动重试次数。
  3. [总是] 无论退出状态如何,始终重新启动容器。当您始终指定时,Docker守护程序将尝试无限期地重新启动容器。无论容器的当前状态如何,容器也将始终在守护程序启动时启动。