хвост -f еквівалент URL-адреси


10

Я хочу відслідковувати файл журналу моєї програми, який, однак, працює не локально, а на платформі SaaS і відкритий через HTTP та WebDAV. Отже, еквівалент хвоста -f, який працює для URL-адрес, зробив би для мене чудову роботу.

PS Якщо ви знаєте про будь-які інші інструменти, які можуть контролювати віддалені файли через HTTP, це також може бути корисним. Дякую


1
Чи відображається це як звичайний текст на віддаленому сервері або як html?
тердон

Звичайний текст із певним форматом: [timetamp] Error_name ..... Який тоді я маю намір відфільтрувати через grep
munch

Ви можете використовувати wget -N http://somewhere/somethingцей файл, який завантажуватиметься лише в тому випадку, якщо він є більш новим, ніж той, який ви завантажили раніше, або використаний wget -O - http://somewhere/somethingдля перенаправлення файлу на stdout.
тиждень

Відповіді:


11

Для цього може бути певний інструмент, але ви також можете це зробити за допомогою 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 для інтеграції з інтерфейсом webDAV, а потім використовувати файл, як звичайний файл. Це я дійсно очікував. Але ваше рішення є більш простим і насправді працює
подаруйте

Я виявив, що все зберігається у файлі "log", а не "log.txt". У моєму випадку це працює: Wget -ca -O log.txt -о / DEV / нуль yoursite.com/log
Яцек

@munch davfs2 працює не так добре. У моєму випадку я виявив, що tail -fне оновлює зміни файлів, якщо інший процес активно не вимагає від сервера оновлень каталогів (звичайно lsздається, достатньо). Проблема tail -fпокладається на inotify, а inotify, здається, не працює над davfs2.
jesjimher

@jesjimher tailне залежить від інотифікації. Він просто читає файл, шукає назад і читає знову. Якщо це не добре працює з davfs, це буде зводитись до того, як сам davfs працює. Імовірно, він оновлює інформацію лише тоді, коли щось активно читає каталог, і оскільки він tailзберігає файл відкритим, це не запускає його. Або щось у цьому напрямку.
тердон

Наскільки я розумію код хвоста, це не залежність, але він використовує inotify, якщо він доступний, вдаючись до опитування поведінки, лише якщо inotify недоступний у системі. Оскільки davfs не може знати, коли файл змінився без явного запиту, жодна ініціативна подія не створюється, поки інший процес не вимагає оновлення каталогу. Було б непогано, якби хвіст мав якийсь спосіб примусити опитування, навіть якщо є інотифікований, але такого параметра я не знайшов.
jesjimher

3

Я відповів на те саме запитання тут із повним скриптом оболонки, який приймає 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 представив байтові діапазони. Використовуючи це, клієнт може подати запит на отримання лише однієї або декількох частин визначеного документа. Curl підтримує це прапором -r.

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

Наприклад

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

Це отримає останні 2000 байт журналу кожні 30 секунд.

Примітка: для самостійного підписання https використовуйте - незахищений варіант завивки

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.