/mysqlshare를 보기 위한 스크립트는 모든 목록 서버에 존재하며 첫 번째 반복만 수행합니다.

/mysqlshare를 보기 위한 스크립트는 모든 목록 서버에 존재하며 첫 번째 반복만 수행합니다.

/mysqlshare모든 MySQL 서버에서 자세한 정보를 얻어야 합니다 . 루프를 사용하여 스크립트를 작성했지만 while read첫 번째 서버의 세부 정보만 가져옵니다.

#!/bin/ksh
file="/home/mysqladm/server_list/server_list.txt"
# while loop
while IFS= read -r a
do
        # display line or do something on $line
        output=`ssh $a df -h | grep mysqlshare`
#echo $a,$output
echo $a ,$output >> /home/mysqladm/server_list/output.txt
done < "$file"

server_list.txt다음과 같이 두 개의 서버가 있는 파일이 있습니다 .

server_name1,
server_name2,

server_name1로 이동하여 df -h스크립트를 실행하고 종료합니다. 루프가 작동하지 않는 이유는 무엇입니까?

답변1

SSH는 나머지 표준 입력을 모두 읽으려고 시도하므로 루프가 중단됩니다. 표준 입력을 null < /dev/null등 으로 연결해야 합니다 .

이를 달성하기 위해 스크립트를 작성한 방법은 다음과 같습니다.

#!/bin/bash
IFS=,
file=servers.txt
logfile=log.txt
while read server
do
        ssh $server<<<"df -h | grep mysqlshare" 2>&1>>$logfile
done < $file

관련 정보