Saya mencoba membuat skrip yang akan menampilkan semua proses yang tidak berfungsi di 66 kotak redhat ke satu file teks. Saya memahami prinsip-prinsip melakukan ini pada satu kotak, tetapi saya tidak yakin bagaimana mengarahkan proses itu menjadi sesuatu yang akan berjalan di satu kotak, tetapi menanyakan beberapa kotak.
Jadi, saya telah menemukan skrip kecil ini:
for host in $(cat hosts.txt); do ssh "$host" "$command" >"output.$host"; done
Saya mengerti bahwa pada dasarnya saya dapat mengirimkan ps -ef | grep "defunct"
sebagai $command
, tapi menurut saya file keluaran apa pun yang saya buat akan di-drop ke host yang menjalankannya.
Saya perlu menjalankan ini dari satu kotak, menyimpan output pada satu kotak itu, tetapi berisi informasi untuk 65 kotak lainnya?
Saya yakin kami memiliki ssh tanpa kata sandi. Pengetahuan saya tentang Unix agak menengah, saya tahu sedikit karena saya menggunakan SAS.
Jawaban yang Diterima:
Pengalihan terjadi pada mesin pemanggil, bukan pada mesin jarak jauh, sehingga file hasil akan bersifat lokal. Juga, grep
tidak perlu dijalankan dari jarak jauh:
while read -r host; do
ssh "$host" ps -ef | grep "defunct" >"output.$host"
done <hosts.txt
Ini mengeksekusi ps -ef
pada setiap host dan grep
akan mengekstrak defunct
garis keluaran. grep
akan berjalan secara lokal, bukan jarak jauh. File hasil, juga, dibuat secara lokal.
Jika Anda menginginkan satu file keluaran:
while read -r host; do
ssh "$host" ps -ef | grep "defunct"
done <hosts.txt >output.txt
Atau bahkan (untuk satu permintaan grep
)
while read -r host; do
ssh "$host" ps -ef
done <hosts.txt | grep "defunct" >output.txt