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

标签 node.js linux windows service child-process

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

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

这给我一个 ENOENT 错误。当我尝试一个简单的 dir 命令时,我的 Windows 系统出现了同样的错误,我不得不在我的 system32(或路径环境变量中的任何目录)中编写一个名为“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 中运行两个进程。

相反,您可以分解两个进程并使用第一个进程(服务)的stdout,作为第二个进程的stdin一个(grep)。我相信应该这样做:

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}`);
  }
});

希望这对您有所帮助。

关于node.js - Nodejs - 了解服务状态的最佳方式 [linux],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49114366/

相关文章:

windows - C stat() 函数报告 Windows 桌面文件夹是只读的

javascript - PM2 在运行时更改集群进程大小

node.js - NodeJS、作业调度

android - Firebase云函数触发两次

linux - 终端:在窗口中打开当前路径?

c++ - 在 switch 语句中使用运算符关键字

java - socket.io-java-client 和 node.js - 握手时出错

java - 使用 Java 在 Linux 上模拟网络连接问题

java - 执行 RDP 时 Sukuli 按钮识别

c - 如何使用 C 在控制台上打印 UTF-8 字符