アプリケーションのログファイルを監視したいのですが、ローカルでは機能しませんが、SaaSプラットフォームで、HTTPおよびWebDAVを介して公開されます。したがって、tail-fと同等の機能があります。 URLは私にとって素晴らしい仕事をするでしょう。
P.S. HTTP経由でリモートファイルを監視できる他のツールを知っている場合は、それも役立つ可能性があります。ありがとう
これには特定のツールがあるかもしれませんが、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
同じ質問に ここ で、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サーバーではあまり友好的ではありません。 true
をsleep 1
に置き換えると、リソースの消費を抑えることができます。
tail -f
と同様に、出力の監視が終了したら、出力が完了した場合でも^C
する必要があります。
これを実現するには、範囲オプション付きのカールを時計と組み合わせて使用できます。
範囲
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オプションを使用してください