URL의 tail -f에 해당


10

로컬에서 작동하지 않지만 SaaS 플랫폼에서 작동하며 HTTP 및 WebDAV를 통해 노출되는 애플리케이션의 로그 파일을 모니터링하고 싶습니다. 따라서 URL에 작동하는 tail -f와 동등한 기능이 저에게 큰 도움이됩니다.

PS HTTP를 통해 원격 파일을 모니터링 할 수있는 다른 도구를 알고 있다면 도움이 될 수도 있습니다. 감사


1
원격 서버 또는 HTML로 일반 텍스트로 표시됩니까?
terdon

특정 형식의 일반 텍스트 : [timestamp] 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

그러면 2 초마다 로그 파일을 다운로드하여 log.txt이미 존재하는 내용에 출력을 추가하여 저장합니다 ( -c다운로드를 계속하고 -a주어진 파일 이름에 출력을 추가하는 것을 의미 함). 는 -o오류 메시지를 리디렉션합니다 /dev/null/.

따라서 이제 log.txt의 로컬 사본이 있으며 실행할 수 있습니다 tail -f.

tail -f log.txt 

davfs2를 사용하여 webDAV 인터페이스와 통합 한 다음 파일을 일반 파일처럼 사용할 수 있음을 알았습니다. 이것이 내가 실제로 기대 한 것입니다. 그러나 귀하의 솔루션은 더 단순하고 실제로 작동합니다.
Munch

모든 것이 "log.txt"가 아닌 "log"파일에 저장되는 것을 발견했습니다. 내 경우에는 이것이 작동합니다 : wget -ca -O log.txt -o / dev / null yoursite.com/log
yatsek

@ munch davfs2는 잘 작동하지 않습니다. 필자의 경우 tail -f서버에 디렉토리 업데이트를 요청하는 다른 프로세스가 없으면 파일 변경 사항을 업데이트하지 않는 것으로 나타났습니다 (일반적인 ls것으로 보입니다). 문제는 tail -finotify에 의존하며 inotify는 davfs2에서 작동하지 않는 것 같습니다.
jesjimher

@jesjimher tail는 inotify에 의존하지 않습니다. 단순히 파일을 읽고, 다시 찾고 다시 읽습니다. davfs에서 제대로 작동하지 않으면 davfs 자체가 작동하는 방식에 달려 있습니다. 아마도 디렉토리가 무언가를 적극적으로 읽는 중일 때만 정보를 업데이트 tail하고 파일을 열린 상태로 유지하므로 트리거하지 않습니다. 아니면 그 라인을 따라 뭔가.
terdon

꼬리의 코드를 이해하는 한, 의존성이 아니지만 가능한 경우 inotify를 사용하고 시스템에서 inotify를 사용할 수없는 경우에만 폴링 동작을 사용합니다. davfs는 명시적인 요청없이 파일이 언제 변경되었는지 알 수 없으므로 다른 프로세스가 디렉토리 새로 고침을 요청할 때까지 inotify 이벤트가 생성되지 않습니다. inotify를 사용할 수 있더라도 tail이 강제로 폴링을 수행 할 수있는 방법이 있다면 좋을 것입니다. 그러나 그러한 매개 변수를 찾지 못했습니다.
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하도록 with 를 대체 할 수 있습니다.

마찬가지로 출력이 완료된 경우에도 출력을보고 완료 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 사용-안전하지 않은 컬 옵션

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.