顶部未显示某些取决于用户的进程

顶部未显示某些取决于用户的进程

我开发了一个包含 top 命令的脚本,该命令应该由调度程序执行当我自己执行它时,我获得了预期的结果,但是当由调度程序执行时我没有得到预期的结果

有问题的代码行是这一行

ESBLOGENTRY=`top -b -n 1 -c|grep " DataFlowEngine"|grep -v grep| gawk '{ print strftime("[%Y-%m-%d %H:%M:%S]"), $0 }'|grep ACES_KOFAX_TCM_DRS|sed 's/[ ]*$//'`

我只是执行 top ,没有交互式和完整的命令选项(-b -n 1 -c),然后 grep 并添加时间戳

机器的系统管理员,对 root 甚至我的同一用户执行了 su 命令,有时该进程就消失了(ESBLOGENTRY 变为空)

调度程序使用的用户永远不会获得输出。

关于这可能有什么问题的任何想法吗?

答案1

命令

ESBLOGENTRY=`top -b -n 1 -c|grep " DataFlowEngine"|grep -v grep| gawk '{ print strftime("[%Y-%m-%d %H:%M:%S]"), $0 }'|grep ACES_KOFAX_TCM_DRS|sed 's/[ ]*$//'`

假设 的输出top将至少包含这两个字符串:

DataFlowEngine ACES_KOFAX_TCM_DRS

这是 34 个字符。在快速检查中,top显示了从第 64 列开始的命令。但top只显示了最多 80 列的行。如果您的环境设置$COLUMNS为更广泛的值,则top可能会使用该值(快速检查一下,这就是 Debian 7 中发生的情况)。这top手册页说如果你使用一个-w选项,它将默认为 512 列,但没有提到默认宽度没有选项。

当行被缩短时,grep forACES_KOFAX_TCM_DRS失败,使脚本返回空字符串。如果您使用-w选项,您的脚本应该更加一致地工作。

或者,将命令更改为

ESBLOGENTRY=`COLUMNS=128 top -b -n 1 -c|grep " DataFlowEngine"|grep -v grep| gawk '{ print strftime("[%Y-%m-%d %H:%M:%S]"), $0 }'|grep ACES_KOFAX_TCM_DRS|sed 's/[ ]*$//'`

将设置环境top(不干扰其他程序)。

相关内容