Ich versuche, ein Skript zu erstellen, das alle nicht mehr funktionierenden Prozesse über 66 Redhat-Boxen in einer einzigen Textdatei ausgibt. Ich verstehe die Prinzipien, dies auf einer Box zu tun, bin mir aber nicht sicher, wie ich diesen Prozess in etwas umwandeln soll, das auf einer Box läuft, aber mehrere Boxen abfragt.
Ich habe also dieses kleine Skript gefunden:
for host in $(cat hosts.txt); do ssh "$host" "$command" >"output.$host"; done
Ich verstehe, dass ich im Wesentlichen ps -ef | grep "defunct"
als $command
, aber ich denke, dass jede von mir erstellte Ausgabedatei auf dem Host abgelegt wird, auf dem sie ausgeführt wird.
Ich muss dies von einer Box ausführen, die Ausgabe auf dieser einen Box speichern, aber die Informationen für die anderen 65 Boxen enthalten?
Ich glaube, wir haben passwortloses ssh eingerichtet. Meine Unix-Kenntnisse sind eher mittelmäßig, ich kenne Teile davon, weil ich SAS verwende.
Akzeptierte Antwort:
Die Umleitung erfolgt auf dem aufrufenden Computer, nicht auf dem Remote-Computer, sodass die Ergebnisdatei lokal ist. Auch das grep
muss nicht remote ausgeführt werden:
while read -r host; do
ssh "$host" ps -ef | grep "defunct" >"output.$host"
done <hosts.txt
Dies führt ps -ef
aus auf jedem Host und grep
wird den defunct
extrahieren Zeilen der Ausgabe. Das grep
läuft lokal, nicht remote. Die Ergebnisdatei wird ebenfalls lokal erstellt.
Wenn Sie eine einzelne Ausgabedatei wünschen:
while read -r host; do
ssh "$host" ps -ef | grep "defunct"
done <hosts.txt >output.txt
Oder sogar (für einen einzelnen Aufruf von grep
)
while read -r host; do
ssh "$host" ps -ef
done <hosts.txt | grep "defunct" >output.txt