bir URL için tail -f eşdeğeri


10

Ancak yerel olarak ama SaaS platformunda çalışmayan ve HTTP ve WebDAV üzerinden maruz kalan benim uygulama günlük dosyasını izlemek istiyorum. Yani, URL'ler için çalışan tail -f eşdeğeri benim için iyi iş çıkarır.

Not: HTTP üzerinden uzak dosyaları izleyebilen başka araçlar biliyorsanız, bu yardımcı olabilir. Teşekkürler


1
Uzak sunucuda düz metin olarak mı yoksa html olarak mı gösteriliyor?
terdon

Belirli bir biçime sahip düz metin: [timestamp] Hata_adı ..... Sonra grep ile filtrelemek niyetindeyim
munch

Bu wget -N http://somewhere/somethingdosyayı yalnızca daha önce indirdiğiniz wget -O - http://somewhere/somethingdosyadan daha yeniyse indirebilir veya dosyayı stdout'a yönlendirmek için kullanabilirsiniz .
Hafta

Yanıtlar:


11

Bunun için belirli bir araç olabilir, ancak wget kullanarak da yapabilirsiniz. Bir terminal açın ve şu komutu çalıştırın:

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

Bu, günlük dosyasını her iki saniyede bir indirir ve log.txtçıktıyı zaten orada olana eklemeye kaydeder ( -cindirmeye devam -aetmek ve çıktıyı verilen dosya adına eklemek anlamına gelir). -oHata mesajları yönlendirir /dev/null/.

Şimdi, log.txt dosyasının yerel bir kopyası var ve üzerinde çalışabilirsiniz tail -f:

tail -f log.txt 

Ben webDAV arayüzü ile entegre ve daha sonra dosyayı normal bir dosya gibi kullanmak için davfs2 kullanabileceğini öğrendim. Gerçekten beklediğim bu. Ama çözüm daha basit ve gerçekten çalışıyor
Munch

Her şeyin "log" dosyasına değil "log.txt" dosyasına kaydedildiğini gördüm. Wget -CA -O log.txt -o / dev / null: Benim durumumda bu eserler içinde yoursite.com/log
yatsek

@munch davfs2 o kadar iyi çalışmıyor. Benim durumumda tail -fsunucudan dizin güncellemelerini aktif olarak isteyen başka bir işlem olmadığı sürece dosya değişikliklerini güncellemediğini buldum (bir düz lsyeterli görünüyor). Sorun tail -finotify'a dayanıyor ve inotify davfs2 üzerinde çalışmıyor gibi görünüyor.
jesjimher

@jesjimher inotify'a tailbağlı değildir. Sadece dosyayı okur, geri arar ve tekrar okur. Davfs ile iyi çalışmazsa, davfların kendisi nasıl çalıştığına bağlı olacaktır. Muhtemelen, sadece bir şey dizini aktif olarak okurken bilgileri günceller tailve dosyayı açık tuttuğundan, bu onu tetiklemez. Ya da bu çizgiler boyunca bir şey.
terdon

Kuyruğun kodunu anladığım kadarıyla, bir bağımlılık değil, ancak eğer mevcut değilse inotify kullanır, ancak inotify sistemde mevcut değilse yoklama davranışına başvurur. Davfs, bir dosyanın açık bir istekte bulunmadan ne zaman değiştiğini bilemediğinden, başka bir işlem bir dizin yenilemesini talep edene kadar inotify olayı oluşturulmaz. Eğer inotify mevcut olsa bile kuyruğun yoklamayı zorlamak için bir yolu olsaydı iyi olurdu, ama böyle bir parametre bulamadım.
jesjimher

3

Burada aynı soruyu URL'yi argüman olarak alan eksiksiz bir kabuk komut dosyasıyla yanıtladım ve tail -f's. İşte bu cevap kelimesinin bir kopyası:


Bunu yapacak:

#!/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"

Teh web sunucusunda çok kolay değil. Sen yerini alabilecek trueolan sleep 1yoğun daha az kaynak olması.

Gibi tail -f, ^Cçıkış bittiğinde bile, çıkış izlemeyi bitirdiğinizde gerekir.


0

saat seçeneği ile birlikte aralık seçeneği ile kıvırmak bunu başarmak için kullanılabilir:

MERA

HTTP 1.1 bayt aralıkları eklendi. Bunu kullanarak, istemci belirtilen belgenin yalnızca bir veya daha fazla alt parçasının alınmasını isteyebilir. Curl bunu -r bayrağıyla destekler.

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

Örneğin

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

Bu işlem, her 30 saniyede bir günlüğün son 2000 baytını alır.

Not: kendinden imzalı https için --insecure curl seçeneğini kullanın

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.