我正在运行一个节点strongloop应用程序,如果它崩溃,需要自动重启。自动重启节点应用程序的最佳方法是什么?当这些崩溃发生时,还有通知吗?
答案 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
,这使得这个过程更加简单和高效,并且意味着我们不再需要永远。
您只需要:
创建服务文件/etc/systemd/system/nodeserver.service
。
按systemctl enable nodeserver.service
启用服务。
按systemctl start nodeserver.service
启动服务。
您始终可以通过运行以下命令来检查其可用性:
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中有关于最佳做法的官方文章,并提及了systemd
。 Read 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
注册并启用它,并通过start
,stop
等控制它。
我正在使用monit
观看内容,并没有遇到任何麻烦,所以我不能说是好还是不好。你可以阅读它at digitalocean。
答案 5 :(得分:1)
PM2永远是管理节点流程的好方法。 PM2将提供友好的图形界面,以便您轻松获取CPU /内存/日志。
在这里,我提出了另一个有趣的想法:Docker。
您可以使用docker hub
中的docker image构建运行时环境运行它:
docker run -it [node images] node [your script.js]
您可以使用restart参数管理流程的生命周期。
Docker支持以下重启策略: