有没有办法在 503 错误后自动重启 nodejs 应用程序?

Is there a way to automatically restart nodejs app after a 503 error?

我的 nodejs 应用程序在 运行 之后每隔几周就会不断收到 503 资源超出错误,因此我需要通过 ssh 不断重新启动它。我想知道是否有什么东西可以让我在遇到错误或崩溃时自动重启它。

我在错误期间检查了我们的 A2Hosting 服务器的进程数,但它只显示 0/50。

我正在实时使用推送器。

const express = require("express");
const router = express.Router();

const Pusher = require("pusher");

var pusher = new Pusher({
  appId: "xxxxxx",
  key: "xxxxxxxxxxxxxxxxxx",
  secret: "xxxxxxxxxxxxxxx",
  cluster: "ap1",
  encrypted: true
});

router.post("/", (req, res) => {
  const newVote = {
    id: req.body.id,
    points: 1
  };

  pusher.trigger("scan", "scan-player", {
    id: req.body.id,
    player_id: req.body.player_id,
    admin_id: req.body.admin_id
  });

  return res.json({
    success: true,
    message: "Scan successful!",
    id: req.body.id
   });
});

module.exports = router;

如果您可以在您的服务器上配置 cron 作业,然后编写一个脚本来检查您的日志是否失败并在发现 503 错误时重新启动应用程序并将该脚本附加到 cron 作业。

脚本可以像

if [ grep -q "503 or something specific" $logfile ]; then {
    service $whatever stop;
    service $whatever start;
} fi

错误不应该让您的应用程序崩溃,您应该处理它并记录错误消息。例如,express error handler, see : error handling patterns with express

此外,如果您的应用崩溃,某些程序可以自动重启。最基本的是 forever :

forever start app.js

它会在崩溃时重新启动您的应用程序。但我认为最好的是 pm2 :

pm2 start app.js

它做同样的事情,但有很多额外的功能,比如负载平衡、部署系统、日志管理

希望对您有所帮助,
最好的问候

如果计划尝试 cron job/script 建议,那么您需要在重启后最终清除日志文件,否则会导致重启循环。

有一个名为 logrotate 的工具,它是 cron 本身实现的,您可以将自己的配置文件添加到 /etc/logrotate.d

恕我直言,到目前为止最好的选择是建议的 pm2。它确实是最好和最简单的流程管理器。