在另一台服务器上运行脚本并将值附加到同一文件

时间:2014-06-30 08:21:21

标签: bash shell public-key-encryption

这是我开发的一个脚本,用于检查服务器上的内存并返回表中可以邮寄给我的值。我已经从脚本服务器创建了公钥认证到磁盘检查。

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

1 个答案:

答案 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选项时无用。

您可以看到我还删除了有关HOSTNAMEUSER的流程,因为您已将其提交给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输出。