Sto cercando di creare uno script che produca tutti i processi defunti su 66 caselle redhat in un singolo file di testo. Comprendo i principi per eseguire questa operazione su una scatola, ma non sono sicuro di come trasformare quel processo in qualcosa che verrà eseguito su una scatola, ma interrogare più scatole.
Quindi, ho trovato questo piccolo script:
for host in $(cat hosts.txt); do ssh "$host" "$command" >"output.$host"; done
Capisco che potrei essenzialmente inviare ps -ef | grep "defunct"
come $command
, ma penso che qualsiasi file di output che creo verrà rilasciato sull'host su cui è in esecuzione.
Devo eseguire questa operazione da una casella, memorizzando l'output su quella casella, ma contenendo le informazioni per le altre 65 caselle?
Credo che abbiamo installato ssh senza password. La mia conoscenza di Unix è di livello intermedio, ne conosco un po' perché sto usando SAS.
Risposta accettata:
Il reindirizzamento avviene sulla macchina chiamante, non sulla macchina remota, quindi il file dei risultati sarà locale. Inoltre, il grep
non ha bisogno di essere eseguito in remoto:
while read -r host; do
ssh "$host" ps -ef | grep "defunct" >"output.$host"
done <hosts.txt
Questo esegue ps -ef
su ogni host e grep
estrarrà il defunct
linee di uscita. Il grep
verrà eseguito in locale, non in remoto. Il file dei risultati, allo stesso modo, viene creato localmente.
Se vuoi un unico file di output:
while read -r host; do
ssh "$host" ps -ef | grep "defunct"
done <hosts.txt >output.txt
O anche (per una singola chiamata di grep
)
while read -r host; do
ssh "$host" ps -ef
done <hosts.txt | grep "defunct" >output.txt