这是我开发的一个脚本,用于检查服务器上的内存并返回表中可以邮寄给我的值。我已经从脚本服务器创建了公钥认证到磁盘检查。
mem_check Variable User Server
{
ssh $3@$2 a1=$1 'bash -s' <<'ENDSSH'
echo $a1 >> table
echo $HOSTNAME >> table
echo ${HOME//home/} | tr -d / | sed ':a;N;s/\n/ /g' >> table
mem=$(df -kh /tmp | grep -vE '^Filesystem|cdrom' | awk '{print $5}' | cut -d '%' -f 1 )
if [ $mem -ge 80 ]; then
echo -e "$mem% \n<font style=\"BACKGROUND-COLOR: #FF0000\">R</font>\n" >> table
else
echo -e "$mem% \n<font style=\"BACKGROUND-COLOR: #33cc33\">G</font>\n" >> table
fi
ENDSSH
}
我遇到的问题是它只在远程服务器中创建表文件而不是在运行shell的目录中创建? 是否可以将文件附加到同一目录中?
如果不是,我应该将表格复制回主机服务器而不是自己附加吗? 此外,如果是这种情况,如何删除该服务器中剩余的表文件的滞后副本?
编辑:我能够使用scp将文件附加到同一台服务器上...我想知道是否有办法直接进行?scp $3@$2:/home/$3/table2 /home/host/table2
cat table2 >> table
答案 0 :(得分:2)
您应该检索远程服务器上的数据,然后处理计算机上的数据。这是解决方案之一:
mem_check Variable User Server
{
mem=`ssh $3@$2 "df -h /tmp --output=pcent | grep -v Use | cut -d '%' -f 1"`
echo $1 >> table
echo $2 >> table
echo $3 >> table
if [ $mem -ge 80 ]; then
echo -e "$mem% \n<font style=\"BACKGROUND-COLOR: #FF0000\">R</font>\n" >> table
else
echo -e "$mem% \n<font style=\"BACKGROUND-COLOR: #33cc33\">G</font>\n" >> table
fi
}
我已更改命令以检索空间,因为df
具有内置功能以格式化输出,因此您不需要awk
。另外我认为使用df
时-k
选项在使用-h
选项时无用。
您可以看到我还删除了有关HOSTNAME
和USER
的流程,因为您已将其提交给ssh命令。
使用您的脚本可以执行以下操作:
mem_check Variable User Server
{
ssh $3@$2 a1=$1 'bash -s' <<'ENDSSH' >> table
echo $a1
echo $HOSTNAME
echo ${HOME//home/} | tr -d / | sed ':a;N;s/\n/ /g'
mem=$(df -kh /tmp | grep -vE '^Filesystem|cdrom' | awk '{print $5}' | cut -d '%' -f 1 )
if [ $mem -ge 80 ]; then
echo -e "$mem% \n<font style=\"BACKGROUND-COLOR: #FF0000\">R</font>\n"
else
echo -e "$mem% \n<font style=\"BACKGROUND-COLOR: #33cc33\">G</font>\n"
fi
ENDSSH
}
这将重定向本地文件中的所有ssh输出。