Estoy tratando de crear un script que generará todos los procesos obsoletos en 66 cuadros de redhat en un solo archivo de texto. Entiendo los principios de hacer esto en un cuadro, pero no estoy seguro de cómo calzar ese proceso en algo que se ejecutará en un cuadro, pero consulta varios cuadros.
Entonces, encontré este pequeño script:
for host in $(cat hosts.txt); do ssh "$host" "$command" >"output.$host"; done
Entiendo que esencialmente podría enviar ps -ef | grep "defunct"
como el $command
, pero creo que cualquier archivo de salida que cree se colocará en el host en el que se está ejecutando.
¿Necesito hacer que esto se ejecute desde un cuadro, almacenando la salida en ese cuadro, pero conteniendo la información para los otros 65 cuadros?
Creo que tenemos ssh sin contraseña en su lugar. Mi conocimiento de Unix es algo intermedio, sé un poco porque estoy usando SAS.
Respuesta aceptada:
La redirección ocurre en la máquina que llama, no en la máquina remota, por lo que el archivo de resultados será local. Además, el grep
no necesita ejecutarse de forma remota:
while read -r host; do
ssh "$host" ps -ef | grep "defunct" >"output.$host"
done <hosts.txt
Esto ejecuta ps -ef
en cada host y grep
extraerá el defunct
líneas de salida. El grep
se ejecutará localmente, no de forma remota. El archivo de resultados, igualmente, se crea localmente.
Si desea un único archivo de salida:
while read -r host; do
ssh "$host" ps -ef | grep "defunct"
done <hosts.txt >output.txt
O incluso (para una única invocación de grep
)
while read -r host; do
ssh "$host" ps -ef
done <hosts.txt | grep "defunct" >output.txt