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

时间:2018-03-05 15:52:44

标签: node.js linux windows service child-process

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

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

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

dir = spawnSync('dir'),

通过

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

所以,我认为这与使用sh,cmd或其他扩展名的文件的无自动解析有关 但是,当我更换"服务时,这并不起作用。通过" service.sh"无论如何(从第一段代码开始)

所以,也许有人之前已经这样做了,可以帮助我一点吗?

谢谢, 祝你有愉快的一天!

1 个答案:

答案 0 :(得分:0)

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

相反,您可以分解两个流程并使用第一个流程stdout中的service,而使用第二个流程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}`);
  }
});

希望这会有所帮助。