tail
Birden fazla uzak makinede bir günlük dosyasına çalışıyorum ve çıktıyı yerel iş istasyonuma iletiyorum. Ctrl- tuşuna basıldığında bağlantıların kapanmasını istiyorum C.
Şu anda neredeyse amaçlandığı gibi çalışan aşağıdaki fonksiyona sahibim .
function dogfight_tail() {
logfile=/var/log/server.log
pids=""
for box in 02 03; do
ssh server-$box tail -f $logfile | grep $1 &
pids="$pids $!"
done
trap 'kill -9 $pids' SIGINT
trap wait
}
Bağlantılar kapanıyor ve çıkışını alıyorum tail
. AMA, çıkış bir dizi geldiği için bir tür tamponlama oluyor.
Ve işte eğlenceli kısım…
Aşağıdakini çalıştırırken aynı tamponlama davranışını görebiliyorum ve /var/log/server.log
uzak makinelerde 4-5 kez dosyaya "test" ekliyorum…
ssh server-01 "tail -f /var/log/server.log | grep test"
… Ve onu devre dışı bırakmanın iki yolunu bulmuş…
Ssh'e -t bayrağı ekle.
ssh -t server-01 "tail -f /var/log/server.log | grep test"
Uzak komuttan teklifi kaldırın.
ssh server-01 tail -f /var/log/server.log | grep test
Ancak, bu yaklaşımların hiçbiri yukarıda belirtilen birden fazla makinede yürütülen işlev için çalışmaz.
Çalıştırırken aynı tamponlama davranışına sahip olan dsh'yi denedim.
dsh -m server-01,server-02 -c "tail -f /var/log/server.log | grep test"
Burada, alıntıyı kaldırırsam, tamponlama gider ve her şey iyi çalışır.
dsh -m server-01,server-02 -c tail -f /var/log/server.log | grep test
Ayrıca çalıştı parallel-ssh
tam olarak aynı şekilde çalışır ki dsh
. Biri burada neler olduğunu açıklayabilir mi?
Bu sorunu nasıl düzeltebilirim? ssh
Mümkünse düz ile gitmek için ideal olurdu.
PS multitail
İsteğe bağlı komutları yerine getirebilmek istediğim için kullanmak istemiyorum.
dbitail
ve indirebilirsiniz .