хвост -f эквивалент для URL


10

Я хочу отслеживать файл журнала моего приложения, который, однако, работает не локально, а на платформе SaaS и доступен через HTTP и WebDAV. Таким образом, эквивалент tail -f, который работает для URL-адресов, отлично подходит для меня.

PS Если вам известны какие-либо другие инструменты, которые могут отслеживать удаленные файлы через HTTP, это также может помочь. Спасибо


1
Это показано в виде простого текста на удаленном сервере или в виде HTML?
Тердон

Обычный текст с определенным форматом: [timestamp] Error_name ..... который я затем намереваюсь отфильтровать через grep
munch

Вы можете использовать wget -N http://somewhere/somethingэтот файл для загрузки, только если он новее, чем тот, который вы загружали ранее, или использовать wget -O - http://somewhere/somethingдля перенаправления файла на стандартный вывод.
неделя

Ответы:


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 -o / dev / null yoursite.com/log
yatsek

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

@jesjimher tailне зависит от inotify. Он просто читает файл, ищет обратно и снова читает. Если он не работает с davfs, все будет зависеть от того, как работает сам davfs. Предположительно, он обновляет информацию только тогда, когда что-то активно читает каталог и, поскольку tailфайл остается открытым, это не вызывает его. Или что-то вдоль этих линий.
Terdon

Насколько я понимаю код tail, это не зависимость, но он использует inotify, если он доступен, прибегая к поведению опроса, только если inotify недоступен в системе. Поскольку davfs не может знать, когда файл изменился, не выполнив явный запрос, событие inotify не генерируется, пока какой-либо другой процесс не запросит обновление каталога. Было бы хорошо, если бы у tail был какой-то способ принудительного опроса, даже если доступно inotify, но я не нашел такого параметра.
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 используйте опцию --insecure curl

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.