NodeJS SRCDS查看孙进程的日志

时间:2018-11-19 03:56:38

标签: javascript node.js

我正在编写一个应用程序来处理我的服务器,并且能够将所有输出记录到文件中。我正处在首先看到所有输出的阶段,但是好像我没有从我的第一个子流程创建的子流程中获取输出。这是我的代码:

run.js

const {spawn} = require('child_process')

const server = spawn('bash', ['srcds_run'])

console.log('spawned ' + server.pid)

server.stdout.on('data', data => {
    process.stdout.write(data)
})

server.stderr.on('data', data => {
    process.stdout.write(data)
})

server.stdin.on('data', data => {
    process.stdout.write(data)
})

在控制台中,它打印所有内容,直到srcds_run脚本将其传递到主服务器进程srcds_linux为止。一旦传递下去,将不再有任何输出,但是将启动该过程并且服务器已启动。

这是流程树外观的一个示例。

https://i.linkjay.io/JBipdX.png

以及它如何在节点中运行

https://i.linkjay.io/YzmhIL.png

它将打印srcds_run中的所有内容,而不打印srcds_linux中的任何内容。

此处也不提供Logaddress。

任何帮助将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:0)

找出解决方案!

srcds_run是一个bash脚本,最终会启动二进制文件srcds_linux

我发现我可以使用node-pty来启动srcds_run,而该srcds_linux将以该pty开始。从那里,我将可以访问bash进程,就好像它是child_process一样。您可以管理stdio,也可以管理流程本身。

代码示例:

const pty = require('node-pty')
const path = require('path')

const folder = '/home/local/folders/servers/gmod'
const binary = 'srcds_run'

const args = ['-gamemode sandbox', '+map gm_flatgrass']

const proc = pty.spawn('bash', [path.join(folder, binary)].concat(args), {
    cwd: folder
})

proc.on('data', (data) => {
    console.log('out: ' + data)
})

希望这对以后的所有人有帮助!