javascript - Node.js 进程重启

标签 javascript node.js

我想知道是否有一个通用函数或者可以做一个函数来重启进程;就像 process.disconnect() 但在这种情况下,它会在调用函数时重新启动脚本。

最佳答案

一般进程管理器用于(自动)重启进程,如monit、pm2、nodemon、forever等

但是,您可以通过简单地生成一个分离的子进程等待一段时间然后执行相同的脚本来从进程本身重新启动。您可以结合使用两个命令来执行此操作,一个用于 sleep ,另一个用于当前命令行,或者您可以简单地将 sleep 合并到您的脚本中。后者的一个例子:

const { spawn } = require('child_process');

(function main() {
  if (process.env.process_restarting) {
    delete process.env.process_restarting;
    // Give old process one second to shut down before continuing ...
    setTimeout(main, 1000);
    return;
  }

  // ...

  // Restart process ...
  spawn(process.argv[0], process.argv.slice(1), {
    env: { process_restarting: 1 },
    stdio: 'ignore',
  }).unref();
})();

在 Windows 上,您可能需要将 detached: true 添加到您的 spawn() 配置对象中。对于 *nix,这通常不是必需的。

但要记住的一件事是,如果原始进程是在前台启动的,那么任何重新启动的进程都将无法再访问终端。

此外,您还可以消除延迟和 process.env 检查您的脚本是否不使用在任何给定时间最多只能由一个进程使用的任何资源。

最后一点:如果您的进程异常崩溃,由于内存耗尽、触发 C++ 断言、V8 错误等,您的进程显然不会重新启动(即使您有一个 'unhandledException'process 设置的事件处理程序)。为了解决这些情况,您几乎需要某种外部机制来重新启动该过程。

关于javascript - Node.js 进程重启,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40835187/

相关文章:

javascript - 尝试 console.log 我从 socket.io 收到的消息时收到 401~UNAUTHORIZED

javascript - 如何检查对象是否在逻辑上位于数组中,JavaScript

node.js - Nodejs和express中post文件大小超出限制时如何响应客户端或浏览器

javascript - 子进程库中的 IPC 连接不是双工的

node.js - 将 MeteorJs 应用程序部署到 Google App Engine

javascript - encodeURIComponent 无法与 Twitter 按钮一起使用

javascript - Ruby On Rails before_filter 调用了两次?

ajax - 无效的 JSON GET 请求 Express.js

node.js - 用于简单缓存的 Node 缓存与 Redis

javascript - 将页面拆分为多个编号的 Div,并在单击以显示隐藏的 div 时重新加载整个页面