
/var
한 호스트에서 여러 원격 호스트까지 80%를 초과하는 파일 시스템 사용량을 감지하기 위해 파일 시스템 사용량 명령을 실행하고 있습니다 .
내 명령은 잘 실행되지만( df -h /var | awk '$1 > 80'
) ssh
구문 오류가 발생합니다.
for i in `cat /etc/gridhosts`; do ssh -n -o BatchMode=yes ${i} "df -h /var | awk '$4 > 80'" ; done
awk: > 80
awk: ^ syntax error
awk: > 80
awk: ^ syntax error
awk: > 80
답변1
문제는 프로그램 $4
에서 awk
큰따옴표로 묶인 문자열의 일부라는 것입니다. 큰따옴표로 묶여 있으므로 (로컬) 쉘은 호출하기 전에 이를 확장합니다 ssh
.
셸에서는 $4
4번째 위치 매개변수가 비어 있을 가능성이 높습니다. 이는 코드 $4
의 가 awk
빈 문자열로 대체되어 잘못된 awk
프로그램이 생성됨을 의미합니다.
awk
이 경우 원격 호스트에서 명령을 실행할 필요가 없습니다 . 대신에 그냥 하세요
while IFS= read -r remote; do
ssh -n -o BatchMode=yes "$remote" 'df /var' | awk 'FNR == 2 && $5 > 80'
done </etc/gridhosts
모든 줄 이 아닌 두 번째 줄을 awk
보도록 코드를 변경했습니다 . 왜냐하면 일반적으로 백분율이 위치하는 곳이기 때문입니다. 또한 필요하지 않기 때문에 옵션을 제거했으며 루프 헤더 에서 파일의 전체 내용을 확장하는 대신 루프가 입력 파일을 한 줄씩 읽도록 만들었습니다. 일반적인 경우에는 불필요하게 많은 메모리를 소모합니다.$5
$4
-h
df
for
클러스터 전체 작업을 훨씬 쉽게 수행할 수 있도록 Ansible 또는 유사한 소프트웨어를 평가하는 데 관심이 있을 수도 있습니다.