有人知道从 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/