【问题标题】:How to automatically restart nodejs cli script如何自动重启nodejs cli脚本
【发布时间】:2021-04-08 16:51:42
【问题描述】:

是否可以在执行完代码后自动重启节点cli脚本?

我有这个 cli 脚本,它将一直运行到变量达到限制

const maxExecution = 200;
let i = 0;

let task = setInterval( () => {
  i++;   
  if( i >= maxExecution ){
    clearInterval(task);
  }
  // code here... 
},5000);

i 变量达到设定的限制时,此代码将正常工作并停止任务。我正在阅读this question,了解如何管理process.exit。如果脚本执行已经结束,有什么我可以听的事件吗?

【问题讨论】:

标签: node.js command-line-interface


【解决方案1】:

当我使用 nodetypescript,而不是 vanilla nodejs),它可以按需重启:

import { spawn } from "child_process";

let need_restart:boolean=false;

process.on("exit",function(){
    if(need_restart){
        spawn(process.argv.shift(),process.argv,{
            "cwd":process.cwd(),
            "detached":true,
            "stdio":"inherit"
        });
    }
});

它是 http/ws 服务器的一部分,当所有服务器关闭(没有更多事件)时,进程自动退出。通过将need_restart 设置为true,它会在发生这种情况时自行重启。

我已经很长时间没有使用node了,所以我不确定这是否仍然适用于以后的版本,但我认为这里值得一提。

【讨论】:

  • 我会试试的,谢谢你的建议。我正在编写一个类来实现这种行为,每个脚本都会在代码执行结束时退出。我不确定是继续使用spawn 还是使用节点child_processexec 功能。有什么建议吗?
  • @newbiedev 这里的关键属性之一是"detached":true,它将允许当前进程退出(并因此“重新启动”)。据我所知,exec 不允许此选项,因此它可能会阻止当前进程停止。这在我的情况下很重要,因为我必须释放我正在监听的端口。
  • 我明白了。我会做一些测试来找到更好的功能。目前我正在尝试重新启动该进程并生成同一脚本的多个进程。我目前无法发布新问题,但每一个建议都将不胜感激
猜你喜欢
  • 2016-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-13
  • 2011-02-12
  • 2022-06-12
  • 1970-01-01
  • 2019-07-19
相关资源
最近更新 更多