디스크 공간 로깅을 위한 간단한 쉘 스크립트

디스크 공간 로깅을 위한 간단한 쉘 스크립트

저는 서버 세트에서 디스크 공간을 자동으로 수집하는 작업을 하고 있습니다.

표준 터미널에서 다음을 실행하면:

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

두 가지 방법이 있습니다

방법 1:

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

참고:- 위 명령의 출력이 양호하면 echo마지막에 삭제하면 원격 서버에서 명령이 실행됩니다. 환경 변수와 마찬가지로 변수를 대문자로 사용하지 마십시오.

방법 2:

아래 스크립트를 참고하시면 됩니다

#!/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를 통해 열면 프로그램이 닫히지 않습니다 tmux. tmux화면 명령과 유사하지만 매우 복잡하고 유용합니다.

관련 정보