Хвост -f эквивалент для URL
Я хочу отслеживать файл журнала моего приложения, который, однако, работает не локально, а на платформе SaaS и доступен через HTTP и WebDAV. Таким образом, эквивалент tail -f, который работает для URL-адресов, отлично подходит для меня.
PS Если вам известны какие-либо другие инструменты, которые могут отслеживать удаленные файлы через HTTP, это также может помочь. Спасибо
3 ответа
Для этого может быть специальный инструмент, но вы также можете сделать это с помощью 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
Я ответил на тот же вопрос здесь полным сценарием оболочки, который принимает 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
когда вы закончите смотреть вывод, даже когда вывод сделан.
Для достижения этого можно использовать локон с опцией диапазона в сочетании с часами:
ДИАПАЗОН
В 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