我正在尝试通过 cron 发送电子邮件,以了解哪些进程占用了我的服务器。它工作正常,但生成的电子邮件太过狭窄,我需要了解有关该进程的更多信息。
这是我正在使用的脚本(从这里偷来的:http://www.inmotionhosting.com/support/website/server-usage/create-server-load-monitoring-bash-script):
#!/bin/bash
trigger=10.00
load=`cat /proc/loadavg | awk '{print $1}'`
response=`echo | awk -v T=$trigger -v L=$load 'BEGIN{if ( L > T){ print "greater"}}'`
if [[ $response = "greater" ]]
then
top -cSbn 1 | head -14 | tail -8 | mail -s"High load on server - [ $load ]" [email protected]
fi
最终的电子邮件内容如下:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
810809 root 20 0 20700 13m 3032 R 50 0.0 0:00.40 /prod/process-nam
810802 root 20 0 20700 13m 3032 R 48 0.0 0:00.39 /prod/process-nam
810808 root 20 0 20708 13m 3032 S 48 0.0 0:00.35 /prod/process-nam
810803 root 20 0 20708 13m 3032 S 46 0.0 0:00.39 /prod/process-nam
810810 root 20 0 20168 13m 3028 R 46 0.0 0:00.33 /prod/process-nam
318723 www-data 20 0 146m 131m 3320 R 45 0.4 67:27.96 /home/server/pr
810800 root 20 0 20704 13m 3032 S 45 0.0 0:00.39 /prod/process-nam
如您所见,缺少整个路径。但如果我从 bash 运行脚本,它就会起作用,并发送足够宽的电子邮件。
这是 ncurses 的问题吗?还是管道邮件的问题?
谢谢!
答案1
使用-w
开关top
。
-w :Output-width-override as: -w [ number ]
In 'Batch' mode, when used without an argument top
will format output using the COLUMNS= and LINES= envi‐
ronment variables, if set. Otherwise, width will be
fixed at the maximum 512 columns. With an argument,
output width can be decreased or increased (up to 512)
but the number of rows is considered unlimited.
In normal display mode, when used without an argument
top will attempt to format output using the COLUMNS=
and LINES= environment variables, if set. With an
argument, output width can only be decreased, not
increased. Whether using environment variables or an
argument with -w, when not in 'Batch' mode actual ter‐
minal dimensions can never be exceeded.
Note: Without the use of this command-line option,
output width is always based on the terminal at which
top was invoked whether or not in 'Batch' mode.
答案2
谢谢 Sven,但我的 top 输出是这样的:
# top -w
top: unknown argument 'w'
我猜你有一个更新的版本。但你给我指明了正确的方向(+1):我更改了脚本以导出列上的数字,现在我有了完整的输出:
#!/bin/bash
trigger=15.00
load=`cat /proc/loadavg | awk '{print $1}'`
response=`echo | awk -v T=$trigger -v L=$load 'BEGIN{if ( L > T){ print "greater"}}'`
if [[ $response = "greater" ]]
then
#sar -q | mail -s"High load on server - [ $load ]" [email protected]
export COLUMNS=512
top -cSbn 1 | head -14 | tail -14 | mail -s"High load on server YODA - [ $load ]" [email protected]
fi