【问题标题】:Restart node.js after crash in pm2在 pm2 崩溃后重启 node.js
【发布时间】:2015-03-05 16:30:30
【问题描述】:

根据this question,pm2 应该重启崩溃的应用程序。

当我的应用程序崩溃时,没有任何反应,并且pm2 list 中缺少该进程。我是否必须以某种方式激活“自动重启选项”?

我正在使用:

  • pm2 v0.12.3
  • 节点 v0.11.14
  • 亚马逊 Linux

【问题讨论】:

  • 通常,pm2 应该总是在崩溃时自动重启你的应用程序。如果不是,我猜这是一个仅通过重新启动无法解决的问题。例如。无法连接到数据库。 PM2 将尝试重新启动多次,之后将放弃,因为 db 处于脱机状态。这很容易调试,只需使用“pm2 logs”查看日志,看看是什么导致了这个崩溃并修复它。 :)

标签: javascript node.js linux command-line pm2


【解决方案1】:

尝试使用 PM2 作为监控我的 Node.js 应用程序的唯一方法时,我的结果很差。最后我采取的方法是使用Monit监控应用进程,并在monit配置脚本中使用pm2startOrRestartstop进程。例如,在monitrc 文件中:

check process node_app matching /home/webapps/node_app/app.js start program = "/bin/bash -lc 'cd /home/webapps/node_app && PM2_HOME=/home/webapps/.pm2 /usr/bin/pm2 startOrRestart processes.json'" stop program = "/bin/bash -lc 'cd /home/webapps/node_app && PM2_HOME=/home/webapps/.pm2 /usr/bin/pm2 stop processes.json'"

这不仅可以让您“观察观察者”,它还有助于解决持久的PM2 fails to restart applications after a reboot bug

【讨论】:

    【解决方案2】:

    PM2 应该自动重启应用程序,但有一些替代方法可以确保 PM2 会执行此操作(包括您已经链接到的 --watch 命令)。我走的路线是:

    $ pm2 startup systemd
    

    PM2 然后将输出指令以执行以下命令(注意,我建议复制/粘贴上面的输出startup命令而不是使用下面的示例):

    $ sudo su -c "env PATH=$PATH:/usr/bin pm2 startup systemd -u USERNAME --hp /home/USERNAME"
    

    这将创建环境变量以在应用崩溃或服务器重新启动时重新启动您的进程。

    【讨论】:

    • --watch 并不是要在崩溃时重新启动;)而是“当当前目录或其子目录中的文件被修改时,PM2 可以自动重新启动您的应用程序”,请查看此处pm2.keymetrics.io/docs/usage/watch-and-restart跨度>
    猜你喜欢
    • 1970-01-01
    • 2021-07-18
    • 1970-01-01
    • 1970-01-01
    • 2021-03-28
    • 1970-01-01
    • 2016-09-05
    • 2019-11-12
    • 1970-01-01
    相关资源
    最近更新 更多