当前位置: 首页 > 知识库问答 >
问题:

node.js服务如何在后台运行?

公良文彬
2023-06-03

我用node写了一个工具,如何做到,让用户npm全局安装后,运行直接是后台运行,不需要使用类似pm2之类的工具?

类似Whistle这样的https://www.npmjs.com/package/whistle

共有2个答案

汲昊空
2023-06-03

就是单独开了一个进程,然后再让这个进程脱离终端,这样子进程就不会随着父进程退出而退出了。

像你贴的这个库就是用了 pfork 这个库完成上述操作的。也是同一个作者。

长孙作人
2023-06-03

不知道Whistle的实现,后台运行的话可以把主逻辑放到一个分离的子进程来执行。可以参考官方例子https://nodejs.cn/dist/latest-v18.x/docs/api/child_process.ht...:

在 Windows 上,将 options.detached 设置为 true 可以让子进程在父进程退出后继续运行。 子进程将有自己的控制台窗口。 一旦为子进程启用,则它就不能被禁用。
在非 Windows 平台上,如果 options.detached 设置为 true,则子进程将成为新进程组和会话的领导者。 子进程可以在父进程退出后继续运行,不管它们是否分离。 有关详细信息,请参阅 setsid(2)。
默认情况下,父进程将等待分离的子进程退出。 为了防止父进程等待给定的 subprocess 退出,则使用 subprocess.unref() 方法。 这样做会使父进程的事件循环不将子进程包括在其引用计数中,从而允许父进程独立于子进程退出,除非在子进程和父进程之间建立了 IPC 通道。
当使用 detached 选项启动长时间运行的进程时,进程在父进程退出后不会一直在后台运行,除非提供了未连接到父进程的 stdio 配置。 如果继承了父进程的 stdio,则子进程将保持与控制终端的连接。
长时间运行的进程的示例,通过分离并忽略其父进程的 stdio 文件描述符,以忽略父进程的终止:
const { spawn } = require('node:child_process');

// process.argv[0]当前进程的node路径
const subprocess = spawn(process.argv[0], ['child_program.js'], {
  detached: true,
  stdio: 'ignore',
});

subprocess.unref();
 类似资料:
  • 我试图开发一个flutter应用程序,它将从服务器每10秒使用计时器获取数据。它在前景时都工作得很好。所以我按照这里提供的文档工作管理器,我可以从服务器得到数据,即使当应用程序在后台,但不能减少频率低于15分钟。我不想在原生android和iOS中编码。我该如何处理这种情况?有没有我遗漏的解决方案?

  • 问题内容: 多年来,由于这篇文章引起了很多关注,因此我在文章的底部列出了每个平台的最佳解决方案。 原始帖子 : 我希望我的node.js服务器在后台运行,即:当我关闭终端时,我希望服务器继续运行。我已经用谷歌搜索并提出了本教程,但是它没有按预期工作。因此,我没有使用该守护程序脚本,而是以为我只使用了输出重定向(该`2>&1 file`部分),但这也不会退出-我在终端中出现空白行,就像它在等待输出/

  • 问题内容: 我最近完成了 Wiki网站开发教程 (http://golang.org/doc/articles/wiki/)。我玩得很开心,我想用net / http包做更多的实验。 但是,我注意到从控制台运行Wiki时,该Wiki将接管控制台。如果我关闭控制台终端或停止进程,则服务器将停止。 如何使服务器在后台运行?我认为该术语在守护程序中运行。 我正在Ubuntu 12.04上运行它。谢谢你的

  • 本文向大家介绍Node.js搭建小程序后台服务,包括了Node.js搭建小程序后台服务的使用技巧和注意事项,需要的朋友参考一下 准备条件 一台服务器 SSL证书,小程序规定必须要https协议 服务器后台 Node.js express mongodb pm2 下面以腾讯云主机(centos)为例 安装Node.js yum install nodejs 也可以安装nvm,用nvm管理nodejs

  • 问题内容: 我一直在为Android开发一个包含后台服务的PhoneGap应用程序。我的问题是:如何调试此服务?是否可以使用AVD进行调试并逐步进行?还是可以使用自己的设备来实现? 谢谢! 问题答案: 是的,可以使用AVD或设备来完成。查看http://www.helloandroid.com/tutorials/how-debug- service 和调试服务。