我用top -c -n1 -b | tail -18 > topout.txt
成功了。
它topout.txt
显示了进程名称/所用命令的完整输出。
但是 - 一旦我将这行代码复制到 .sh 文件中并通过crontab
或手动运行 - 输出总是被截断,即,无论我如何编码,它都会显示 oracle_myp+..”而不是完整的进程条目,如“oracle_myprodbrac1..”
我尝试将其附加到 shell 日志文件(在cron
使用 中创建shell_name.sh > shell_name.log 2>&1
)但它似乎总是截断 RHS 部分。
例如:
Top 10 processes during this load ..
Warning! pddb1-nnvwv1 load average exceeds 25 - is 25
age: 25.35, 23.93, 19.84
Tasks: 4855 total, 34 running, 4819 sleeping, 0 stopped, 2 zombie
%Cpu(s): 79.7 us, 8.9 sy, 0.0 ni, 9.5 id, 0.0 wa, 0.0 hi, 1.7 si, 0.2 st KiB Mem : 74261747+total, 17263593+free, 43575846+used, 13422308+buff/cache
KiB Swap: 16777212 total, 16768548 free, 8664 used. 28589158+avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
59924 oracle 20 0 96.3g 469296 98688 R 84.6 0.1 0:44.51 oracleGEC+
62677 oracle 20 0 96.3g 469428 98824 R 78.8 0.1 0:44.41 oracleGEC+
68076 oracle 20 0 96.3g 469616 98980 R 78.8 0.1 0:41.54 oracleGEC+
158224 oracle 20 0 102.1g 125592 113388 R 78.8 0.0 452:22.63 oracleGEC+
当我从 $ prompt 运行相同命令时 - 它会向我显示完整的输出;我可以将其假脱机到文件 topout.txt,从 $prompt - 我得到了完整的输出。
当我从 cron / shell 脚本运行它时 - 我看到像上面一样的截断输出。
答案1
-w
:Output-width-override as:
-w [ number ]
在批处理模式下,如果使用不带参数的 top,将使用
COLUMNS=
和LINES=
环境变量(如果已设置)格式化输出。否则,宽度将固定为最大 512 列。使用参数时,输出宽度可以减少或增加(最多 512),但行数被视为不受限制。在正常显示模式下,如果使用时不带参数,top 将尝试使用
COLUMNS=
和LINES=
环境变量(如果已设置)来格式化输出。使用参数时,输出宽度只能减少,不能增加。无论是使用环境变量还是带有 的参数-w
,当不处于批处理模式时,实际终端尺寸永远不会超出。注意:如果不使用此命令行选项,无论是否处于批处理模式,输出宽度始终基于调用 top 的终端。
这对我来说很复杂,也不是很清楚。例如,不清楚“最多 512”是否适用于COLUMNS=
设置的情况。我的测试表明是的,最大值是 512(= 511 + 换行符)。
我想如果不修改 ,您就无法解决这个问题top
。使用-w 512
。非常长的命令将被截断,因此它并不完全符合您的要求。另一方面,您将在交互式 shell 中观察到的输出称为“完整输出”,并且它不能包含超过 512 行;所以也许 512 对您来说就足够了。
即使有时您会遇到截断的行,512 也会比您迄今为止从 cron 作业中获得的 80(左右)要好得多。