J'essaie de créer tail
un fichier journal sur plusieurs ordinateurs distants et de transférer la sortie sur mon poste de travail local. Je veux que les connexions se ferment lorsque vous appuyez sur Ctrl- C.
Pour le moment, j'ai la fonction suivante qui fonctionne presque comme prévu.
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
}
Les connexions se ferment et je reçois la sortie de tail
. MAIS, il y a une sorte de mise en mémoire tampon en cours parce que la sortie vient par lots.
Et voici la partie amusante…
Je peux voir le même comportement de mise en mémoire tampon lors de l'exécution de la commande suivante et ajouter «test» au fichier /var/log/server.log
sur les machines distantes 4 à 5 fois…
ssh server-01 "tail -f /var/log/server.log | grep test"
… Et trouvé deux moyens de le désactiver…
Ajoutez -t flag à ssh.
ssh -t server-01 "tail -f /var/log/server.log | grep test"
Supprimer la citation de la commande à distance.
ssh server-01 tail -f /var/log/server.log | grep test
Cependant, aucune de ces approches ne fonctionne pour la fonction qui s'exécute sur plusieurs machines mentionnées ci-dessus.
J'ai essayé dsh, qui a le même comportement de mise en mémoire tampon lors de l'exécution.
dsh -m server-01,server-02 -c "tail -f /var/log/server.log | grep test"
Idem ici, si je supprime la citation, la mise en mémoire tampon disparaît et tout fonctionne correctement.
dsh -m server-01,server-02 -c tail -f /var/log/server.log | grep test
Aussi essayé parallel-ssh
qui fonctionne exactement le même que dsh
. Quelqu'un peut-il expliquer ce qui se passe ici?
Comment résoudre ce problème? Serait idéal pour aller avec tout droit ssh
si possible.
PS je ne veux pas utiliser multitail
ou similaire puisque je veux pouvoir exécuter des commandes arbitraires.
dbitail
et le télécharger à partir d' ici .