एक यूआरएल के लिए पूंछ के बराबर


9

मैं अपने एप्लिकेशन की लॉग फ़ाइल की निगरानी करना चाहता हूं जो हालांकि स्थानीय स्तर पर नहीं बल्कि सास प्लेटफॉर्म पर काम करती है और HTTP और WebDAV पर उजागर होती है। तो, एक समान टेल-ऑफ़ जो URL के लिए काम करता है, मेरे लिए बहुत अच्छा काम करेगा।

PS यदि आप किसी अन्य उपकरण के बारे में जानते हैं जो HTTP पर दूरस्थ फ़ाइलों की निगरानी कर सकता है, तो यह मदद का भी हो सकता है। धन्यवाद


1
क्या यह दूरस्थ सर्वर पर या html के रूप में सादे पाठ के रूप में दिखाया गया है?
टेराडॉन

विशिष्ट प्रारूप के साथ सादा पाठ: [टाइमस्टैम्प] ERROR_NAME ..... कौन सा मैं तो ग्रेप के माध्यम से फिल्टर करने के लिए आशय
मंच

आप उपयोग कर सकते हैं wget -N http://somewhere/something, कि फाइल को केवल तभी डाउनलोड करें जब यह एक से अधिक नया हो जिसे आपने पहले डाउनलोड किया था या wget -O - http://somewhere/somethingफ़ाइल को पुनः लोड करने के लिए पुनर्निर्देशित करने के लिए उपयोग करें।
सप्ताह

जवाबों:


10

इसके लिए एक विशिष्ट उपकरण हो सकता है, लेकिन आप इसे wget का उपयोग करके भी कर सकते हैं। एक टर्मिनल खोलें और इस कमांड को चलाएं:

while(1); do \
    sleep 2; \
    wget -ca -O log.txt -o /dev/null http://yoursite.com/log; \
done

यह हर दो सेकंड में लॉगफाइल को डाउनलोड करेगा और log.txtआउटपुट को इसमें जोड़ने से बचाएगा, जो पहले से ही है ( -cमतलब डाउनलोड करना जारी रखें और -aइसका मतलब है कि आउटपुट को दिए गए फ़ाइल नाम में जोड़ें)। -oरीडायरेक्ट त्रुटि संदेश के लिए /dev/null/

तो, अब आपके पास log.txt की एक स्थानीय प्रति है और उस tail -fपर चल सकते हैं :

tail -f log.txt 

मुझे पता चला कि मैं davfs2 का उपयोग वेबडैव इंटरफेस के साथ एकीकृत करने के लिए कर सकता हूं और फिर एक नियमित फाइल की तरह फाइल का उपयोग कर सकता हूं। यह वही है जिसकी मुझे वास्तव में उम्मीद थी। लेकिन अपने समाधान अधिक सरल है और वास्तव में काम करता है
मंच

मैंने पाया कि सब कुछ "लॉग" फ़ाइल में सहेजा जा रहा है न कि "log.txt"। मेरे मामले में यह काम करता है: wget -ca -O log.txt -o / dev / null yoursite.com/log
yatsa

@ munch davfs2 उतना अच्छा काम नहीं करता है। मेरे मामले में मैंने पाया कि tail -fजब तक कोई अन्य प्रक्रिया सक्रिय रूप से निर्देशिका अपडेट के लिए सर्वर से पूछ रही है (एक सादा lsपर्याप्त लगता है) फ़ाइल परिवर्तन को अपडेट नहीं करता है । समस्या tail -finotify पर निर्भर करती है, और inotify davfs2 पर काम नहीं करती है।
jesjimher

@jesjimher inotify tailपर निर्भर नहीं करता है यह बस फ़ाइल को पढ़ता है, वापस चाहता है और फिर से पढ़ता है। यदि यह davfs के साथ अच्छी तरह से काम नहीं करता है, तो यह नीचे होगा कि कैसे davfs स्वयं काम करता है। संभवतया, यह केवल उस जानकारी को अपडेट करता है जब कुछ सक्रिय रूप से निर्देशिका को पढ़ रहा होता है और चूंकि tailफ़ाइल को खुला रखता है, जिससे यह ट्रिगर नहीं होता है। या उनके जैसे की कुछ और।
टेराडॉन

जहां तक ​​मैं पूंछ के कोड को समझता हूं, यह निर्भरता नहीं है, लेकिन अगर यह उपलब्ध है, तो यह inotify का उपयोग करता है, अगर सिस्टम में inotify उपलब्ध नहीं है, तो केवल मतदान व्यवहार का सहारा लेना। चूँकि davfs को यह पता नहीं चल सकता है कि जब कोई फ़ाइल बिना किसी स्पष्ट अनुरोध के बदल गई है, तो कोई भी inotify घटना तब तक उत्पन्न नहीं होती है जब तक कि कोई अन्य प्रक्रिया एक निर्देशिका रिफ्रेश का अनुरोध नहीं करती है। यह अच्छा होगा यदि पूंछ में मतदान को मजबूर करने का कोई तरीका हो, भले ही इनोटिफ़ाइ उपलब्ध हो, लेकिन मुझे ऐसा कोई पैरामीटर नहीं मिला है।
jesjimher 14

2

मैंने पूरी शेल स्क्रिप्ट के साथ यहां एक ही सवाल का जवाब दिया जो URL को तर्क के रूप में लेता है और tail -fयह है। यहाँ उस उत्तर की एक प्रति है:


यह यह करेगा:

#!/bin/bash

file=$(mktemp)
trap 'rm $file' EXIT

(while true; do
    # shellcheck disable=SC2094
    curl --fail -r "$(stat -c %s "$file")"- "$1" >> "$file"
done) &
pid=$!
trap 'kill $pid; rm $file' EXIT

tail -f "$file"

यह तेह वेब-सर्वर पर बहुत अनुकूल नहीं है। आप कम संसाधन गहन होने के trueसाथ बदल सकते हैं sleep 1

जैसे tail -f, आपको ^Cआउटपुट को देखते हुए काम करने की आवश्यकता होती है, तब भी जब आउटपुट किया जाता है।


0

इसे प्राप्त करने के लिए घड़ी के साथ संयोजन में रेंज विकल्प के साथ कर्ल का उपयोग किया जा सकता है:

पर्वतमाला

HTTP 1.1 बाइट-रेंज पेश किया। इसका उपयोग करके, एक ग्राहक एक निर्दिष्ट दस्तावेज़ के केवल एक या अधिक उप-हिस्से प्राप्त करने का अनुरोध कर सकता है। कर्ल -r ध्वज के साथ इसका समर्थन करता है।

watch -n <interval> 'curl -s -r -<bytes> <url>'

उदाहरण के लिए

watch -n 30 'curl -s -r -2000 http://yoursite.com/log'

यह हर 30 सेकंड में लॉग के अंतिम 2000 बाइट्स को पुनः प्राप्त करेगा।

नोट: स्वयं हस्ताक्षरित https उपयोग --insecure कर्ल विकल्प के लिए

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.