用于记录磁盘空间的简单 Shell 脚本

用于记录磁盘空间的简单 Shell 脚本

我正在致力于自动收集一组服务器上的磁盘空间。

在标准终端中,如果我运行:

ssh server1 ssh server2 df -h 

然后我得到命令的输出,就好了。

但是,如果我在使用 For 循环的脚本中尝试此方法。然后就失败了。

脚本示例:

#!/bin/bash

GROUP="server1 server2"

for s in $GROUP; do 
    ssh bastion1 ssh ${s} df -h
done

在后一个示例中,我没有得到任何输出(或与此相关的错误)。我尝试过各种转义和引用,但仍然没有运气......我有一种感觉,这是我所忽略的明显的东西。有什么指点吗?

答案1

你有两种方法

方法一:

Groups="server1 server2"
echo $Groups | xargs -n1 |  xargs  -I'{}' echo ssh '{}' df

注意:-如果上述命令的输出正常,则只需echo在最后删除即可,然后它将在远程服务器上运行命令。不要在大写字母中使用变量,因为它用于环境变量

方法二:

您可以参考下面的脚本

#!/bin/bash
# ssh password less login is required

# mention below remote server seperated by space

remote_srv=( 127.0.0.1 127.0.0.2 127.0.0.3 )

do_ssh() {
    ssh $s "$@"
    echo -e
}

header() {
    echo "#==================={$@}==========================#"
}

n=${#remote_srv[@]} # number of ip's in array

for (( i=0;i<$n;i++)); do
            echo -e
            echo "$(tput bold)$(tput setaf 2)* Connected Server: ${remote_srv[$i]}  @@ $(date) @@"
            echo "* Fetching info...$(tput sgr 0)"
            s=${remote_srv[$i]}

            header "Memory Usage"
            do_ssh free -m

            header "Disk Usage"
            do_ssh df -h
done

## EOF

答案2

UNIX 为您提供了更好的解决方案,您不需要 ssh 并运行 df 或 du 等......

您可以tmux command在服务器上使用并关闭会话,但是如果您通过打开,则不会关闭程序tmuxtmux类似于屏幕命令,但非常非常复杂和有用。

相关内容