मैं tail
कई दूरस्थ मशीनों पर एक लॉग फ़ाइल की कोशिश कर रहा हूँ और अपने स्थानीय कार्य केंद्र को आउटपुट अग्रेषित कर रहा हूँ । मैं दबाते समय कनेक्शन बंद करना चाहता हूं Ctrl- C।
फिलहाल मेरा निम्नलिखित कार्य है जो लगभग इरादा के अनुसार काम करता है।
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
}
कनेक्शन बंद है और मैं से उत्पादन प्राप्त करते हैं tail
। लेकिन, कुछ प्रकार की बफरिंग चल रही है क्योंकि आउटपुट बैचों में आते हैं।
और यहाँ मजेदार हिस्सा है ...
मैं एक ही बफरिंग व्यवहार को देख सकता हूं जब /var/log/server.log
4-5 बार दूरस्थ मशीनों पर फ़ाइल में निम्नलिखित और परिशिष्ट "निष्पादित" किया जाता है ...
ssh server-01 "tail -f /var/log/server.log | grep test"
... और इसे अक्षम करने के दो तरीके पाए गए ...
Add -t flag to ssh।
ssh -t server-01 "tail -f /var/log/server.log | grep test"
रिमोट कमांड से कोटेशन निकालें।
ssh server-01 tail -f /var/log/server.log | grep test
हालाँकि, इनमें से कोई भी फ़ंक्शन उस फ़ंक्शन के लिए काम नहीं करता है जो ऊपर उल्लिखित कई मशीनों पर निष्पादित होता है।
मैंने dsh की कोशिश की है, जिसे निष्पादित करते समय एक ही बफरिंग व्यवहार होता है।
dsh -m server-01,server-02 -c "tail -f /var/log/server.log | grep test"
यहां भी, यदि मैं उद्धरण हटाता हूं, तो बफ़रिंग चली जाती है और सब कुछ ठीक रहता है।
dsh -m server-01,server-02 -c tail -f /var/log/server.log | grep test
यह भी कोशिश की parallel-ssh
जो ठीक उसी तरह काम करता है dsh
। क्या कोई समझा सकता है कि यहाँ क्या चल रहा है?
मैं इस समस्या को कैसे हल करूं? ssh
यदि संभव हो तो सीधे जाने के लिए आदर्श होगा ।
पुनश्च मैं उपयोग नहीं करना चाहता multitail
या इसी तरह से जब से मैं मनमाना आदेशों को निष्पादित करने में सक्षम होना चाहता हूं।
dbitail
से चेकआउट और डाउनलोड कर सकते हैं ।