我想以root身份运行一个程序,可以拦截其他程序stderr
和stdout
。
例如,假设我启动一个nodejs
服务器,并且出现错误(日志打印到stderr
),如果我的程序正在运行,我希望它能拦截此错误。< / p>
这可能吗?我应该怎么做 ?
此外,我想到的一个想法是将nodejs
二进制文件替换为另一个启动nodejs
并将stderr
重定向到自定义文件的二进制文件。但我觉得它太乱了,我希望有更好的方法来做到这一点。
答案 0 :(得分:1)
如果您可以控制nodejs
的调用方式,您可以将stderr
重定向到命名管道,然后从另一个命令读取命名管道,如下所示:
mkfifo /tmp/nodejs.stderr
nodejs 2>/tmp/nodejs.stderr
然后在其他一些shell类型中:
grep "Error Pattern" </tmp/nodejs.stderr
如果你无法控制如何调用nodejs,那么你可以创建一个shell脚本来包装这些命令,并在调用nodejs的地方调用shell脚本。