/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