Snažím se vytvořit skript, který vypíše všechny zaniklé procesy přes 66 redhat boxů do jediného textového souboru. Rozumím principům, jak to udělat na jedné krabici, ale nejsem si jistý, jak tento proces přeměnit na něco, co poběží na jedné krabici, ale dotazuji se na několik krabic.
Takže jsem našel tento malý skript:
for host in $(cat hosts.txt); do ssh "$host" "$command" >"output.$host"; done
Chápu, že mohu v podstatě odeslat ps -ef | grep "defunct"
jako $command
, ale myslím si, že jakýkoli výstupní soubor, který vytvořím, bude přenesen na hostitele, na kterém běží.
Potřebuji, aby se to spouštělo z jednoho boxu, přičemž výstup ukládám do toho jednoho boxu, ale obsahuje informace pro dalších 65 boxů?
Věřím, že máme zavedené ssh bez hesla. Moje znalost Unixu je středně pokročilá, trochu z toho vím, protože používám SAS.
Přijatá odpověď:
K přesměrování dojde na volajícím počítači, nikoli na vzdáleném počítači, takže výsledný soubor bude lokální. Také grep
nemusí spouštět vzdáleně:
while read -r host; do
ssh "$host" ps -ef | grep "defunct" >"output.$host"
done <hosts.txt
Tím se provede ps -ef
na každém hostiteli a grep
rozbalí defunct
výstupní řádky. grep
poběží lokálně, ne vzdáleně. Výsledný soubor je rovněž vytvořen lokálně.
Pokud chcete jeden výstupní soubor:
while read -r host; do
ssh "$host" ps -ef | grep "defunct"
done <hosts.txt >output.txt
Nebo dokonce (pro jediné vyvolání grep
)
while read -r host; do
ssh "$host" ps -ef
done <hosts.txt | grep "defunct" >output.txt