首页 > 解决方案 > 从 shell 脚本运行时,top 和 grep 不输出任何内容

问题描述

我正在尝试创建 ssh 到远程服务器的 shell 脚本并在那里运行脚本并在本地服务器中打印输出,但是当我在本地服务器中运行脚本时,它大部分时间什么都不输出并且很少输出数据:

Mule: CPU > % RAM > %

当我在本地服务器中通过命令行 ssh 到远程服务器并运行脚本时,它会在命令行中正常输出:

Mule: CPU > 39.0% RAM > 8.1%

本地服务器中的脚本

#!/bin/bash
echo -e '\r' 
echo 'leg3'
echo -e '\r'
ssh  -qT appread@${remote} << EOF
source /home/appread/Process_mon.sh 
exit
EOF

远程服务器中的脚本:

#!/bin/bash
mulecpu=$(top -b -n 1 -c  | grep  -P '.*[j]ava.*mule.*'|  awk '{print $9}')
muleram=$(top -b -n 1 -c  | grep -P '.*[j]ava.*mule.*'|  awk '{print $10}')
m=$(echo 'Mule: CPU > '$mulecpu'% RAM > '$muleram'% ')
echo $m

标签: linuxbashshellgrep

解决方案


如果你top没有运行-w,它的输出可能会被截断,所以你grep可能会失败。

添加-w 512或类似以最大化输出的宽度:

#!/bin/bash

top -b -n 1 -c -w 512 |\
awk '/[j]ava.*mule/ { printf "Mule: CPU > %s%% RAM > %s%%\n",$9,$10 }'



推荐阅读