
Estoy ejecutando el comando de uso del sistema de archivos para detectar /var
el uso del sistema de archivos más allá del 80% desde un host a varios hosts remotos.
Mi comando funciona bien ( df -h /var | awk '$1 > 80'
), pero ssh
me da errores de sintaxis.
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
Respuesta1
El tema es que $4
en el awk
programa forma parte de una cadena entre comillas dobles. Como está entre comillas dobles, el shell (local) lo expandirá antes de llamar ssh
.
En el shell, $4
está el cuarto parámetro posicional, que probablemente esté vacío. Esto significa que el $4
código awk
será reemplazado por una cadena vacía, lo que producirá un awk
programa no válido.
En este caso, no es necesario ejecutar el awk
comando en el host remoto. En lugar de eso, simplemente haz
while IFS= read -r remote; do
ssh -n -o BatchMode=yes "$remote" 'df /var' | awk 'FNR == 2 && $5 > 80'
done </etc/gridhosts
Tenga en cuenta que cambié el awk
código para que se mire $5
en la línea 2 en lugar de en $4
cada línea, ya que aquí es donde generalmente se ubica el porcentaje. Además, eliminé la -h
opción porque df
no es necesaria y hice que el bucle lea el archivo de entrada línea por línea en lugar de expandir el contenido completo del archivo en un for
encabezado de bucle (lo cual es poco elegante y podría, en (en el caso general, consume mucha memoria innecesariamente).
Quizás también le interese evaluar Ansible o software similar, ya que esto facilitaría mucho las operaciones en todo el clúster.