web-dev-qa-db-ja.com

URLに相当するtail-f

アプリケーションのログファイルを監視したいのですが、ローカルでは機能しませんが、SaaSプラットフォームで、HTTPおよびWebDAVを介して公開されます。したがって、tail-fと同等の機能があります。 URLは私にとって素晴らしい仕事をするでしょう。

P.S. HTTP経由でリモートファイルを監視できる他のツールを知っている場合は、それも役立つ可能性があります。ありがとう

10
munch

これには特定のツールがあるかもしれませんが、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 
11
terdon

同じ質問に ここ で、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"

Webサーバーではあまり友好的ではありません。 truesleep 1に置き換えると、リソースの消費を抑えることができます。

tail -fと同様に、出力の監視が終了したら、出力が完了した場合でも^Cする必要があります。

3
Brian

これを実現するには、範囲オプション付きのカールを時計と組み合わせて使用​​できます。

範囲

HTTP1.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オプションを使用してください

0
ghm1014