javascript - Node.js 子进程执行返回:错误:kill EPERM STDERR STDOUT_SIZE
问题描述
我正在公开和 API 专用于从 Linux System D 服务打印日志。这是代码示例:
'use strict';
const exec = require('child_process').exec;
const express = require('express');
var router = express.Router();
router.get('/printlogs', function (req, res) {
//simplified for Stack Overflow
var completeCmd = "sudo journalctl -u node-myapp@serveruser --no-pager --since \"2020-06-31 00:00:00\"";
exec(completeCmd, (error, stdout, stderr) => {
var status = 0;
var response = "";
if (error) {
console.log("Error !");
console.log("ERROR : " + error);
console.log("STDERR : " + stderr);
console.log("STDOUT_SIZE : " + stdout.length);
status = 500;
response = stderr;
} else {
console.log("Success !");
status = 200;
response = stdout;
}
res.contentType('text/plain').status(status);
res.send(response);
});
});
module.exports = router;
如果“completeCmd”中的日期足够接近(例如:过去 10 天),那么一切正常……如果日期太早(例如:3 个月前),该过程会以一种奇怪的方式失败:
Error !
ERROR : Error: kill EPERM
STDERR :
STDOUT_SIZE : 1046013
响应在大约 187 毫秒内返回,因此它不是超时... 理论:
- 这可能是 stdout 可能大小的限制吗?
- 这可能与我的命令使用 sudo 的事实有关吗?
谢谢 !
解决方案
推荐阅读
- flutter - 企业项目在 Agora 的一个项目上是否开通了多个渠道?
- robotframework - 仅当测试套件中的一项测试失败时,如何返回主页?
- ios - SwiftUI 中的表单背景颜色不会改变
- c - 将时间从 UTC 更改为 C 中的本地时间
- python - 如何在python列表中随机选择更少的数字并使其每次都唯一
- java - 使用 Tomcat 将 http 重定向到 https 不起作用
- c - 将自定义结构作为参数传递会导致分段错误
- docker - 如何为使用 docker 的 --user 选项设置的 uid 安全地添加条目到 docker 容器的 /etc/passwd
- r - 不同数据集上的线性回归拟合(增强)
- android - React Native:安装到虚拟/物理设备失败