Nodejs - 了解服务状态的最佳方式[linux]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nodejs - 了解服务状态的最佳方式[linux]相关的知识,希望对你有一定的参考价值。

有人知道从linux(centos,here)系统中了解服务状态的最佳方式(或者只是一个好方法)吗?当我运行这段代码时:

{ ... }
const { spawnSync } = require('child_process'),
  ts3 = spawnSync('service teamspeak status | grep active'),
  { ... },

这给我一个ENOENT错误。当我尝试一个简单的dir命令时,我从我的Windows系统得到了同样的错误,我不得不在我的system32(或路径env变量中的任何目录)中编写一个名为“dir.cmd”的愚蠢的cmd文件,内容为“dir”并替换

dir = spawnSync('dir'),

通过

dir = spawnSync('dir.cmd'), //This file is now in a dir in the PATH env var

因此,我认为这与使用sh,cmd或其他扩展的文件的无自动解析有关但是当我用“service.sh”替换“服务”时,这不起作用(来自第一段代码)

那么,也许有人之前已经做过这个并且可以帮助我一点?

感谢,并有一个愉快的一天 !

答案

有几个问题,首先,当使用spawn时,你应该在数组中传递参数。其次,您尝试在一个spawn中运行两个进程。

相反,你可以分解两个过程并使用第一个过程中的stdoutservice),作为第二个过程的stdingrep)。我相信这应该做到:

const { spawn } = require('child_process');
const service = spawn('service', ['teamspeak', 'status']);
const grep = spawn('grep', ['active']);

service.stdout.on('data', (data) => {
  grep.stdin.write(data);
});

service.stderr.on('data', (data) => {
  console.error(`service stderr: ${data}`);
});

service.on('close', (code) => {
  if (code !== 0) {
    console.log(`ps process exited with code ${code}`);
  }
  grep.stdin.end();
});

grep.stdout.on('data', (data) => {
  console.log(data.toString());
});

grep.stderr.on('data', (data) => {
  console.error(`grep stderr: ${data}`);
});

grep.on('close', (code) => {
  if (code !== 0) {
    console.log(`grep process exited with code ${code}`);
  }
});

希望这有帮助。

以上是关于Nodejs - 了解服务状态的最佳方式[linux]的主要内容,如果未能解决你的问题,请参考以下文章

NodeJS 存储基于文件的 JSON 数据库的最佳方式?

使用nodejs和数据库存储GPS纬度和经度的最佳方法

京东前端:PhantomJS 和NodeJS在网站前端监控平台的最佳实践

Express 和 Nodejs:调用外部 API 的最佳方式

NestJS / NodeJS / Passport / JWT - 股票当前用户

处理发布到 Nodejs 服务器的 JSON 消息数组的最佳方法是啥?