équivalent -f pour une URL


10

Je souhaite surveiller le fichier journal de mon application qui ne fonctionne cependant pas localement mais sur une plateforme SaaS et est exposé sur HTTP et WebDAV. Donc, un équivalent de tail -f qui fonctionne pour les URL ferait du bon travail pour moi.

PS Si vous connaissez d'autres outils qui peuvent surveiller des fichiers distants via HTTP, cela peut également être utile. Merci


1
Est-il affiché en texte brut sur le serveur distant ou en html?
terdon

Texte brut avec un format spécifique: [horodatage] nom_erreur ..... que j'ai ensuite l'intention de filtrer à travers grep
munch

Vous pouvez utiliser wget -N http://somewhere/something, qui télécharge le fichier uniquement s'il est plus récent que celui que vous avez téléchargé auparavant ou utilisé wget -O - http://somewhere/somethingpour rediriger le fichier vers stdout.
semaine du

Réponses:


11

Il peut y avoir un outil spécifique pour cela, mais vous pouvez également le faire en utilisant wget. Ouvrez un terminal et exécutez cette commande:

while(1); do \
    sleep 2; \
    wget -ca -O log.txt -o /dev/null http://yoursite.com/log; \
done

Cela téléchargera le fichier journal toutes les deux secondes et l'enregistrera dans l' log.txtajout de la sortie à ce qui est déjà là ( -csignifie continuer le téléchargement et -aajouter la sortie au nom de fichier donné). Le -oredirige les messages d'erreur vers /dev/null/.

Donc, maintenant vous avez une copie locale de log.txt et pouvez l'exécuter tail -f:

tail -f log.txt 

J'ai découvert que je pouvais utiliser davfs2 pour s'intégrer à l'interface webDAV, puis utiliser le fichier comme un fichier normal. C'est ce à quoi je m'attendais vraiment. Mais votre solution est plus simple et fonctionne réellement
grignotez

J'ai trouvé que tout était enregistré dans le fichier "log" et non "log.txt". Dans mon cas, cela fonctionne: wget -ca -O log.txt -o / dev / null yoursite.com/log
yatsek

@munch davfs2 ne fonctionne pas très bien. Dans mon cas, j'ai trouvé que tail -fcela ne met pas à jour les modifications de fichier à moins qu'il n'y ait un autre processus demandant activement au serveur des mises à jour de répertoire (un simple lssemble suffisant). Le problème est tail -fbasé sur inotify, et inotify ne semble pas fonctionner sur davfs2.
jesjimher

@jesjimher tailne dépend pas d'inotify. Il lit simplement le fichier, le recherche et le relit. Si cela ne fonctionne pas bien avec davfs, cela dépendra du fonctionnement de davfs lui-même. Vraisemblablement, il ne met à jour les informations que lorsque quelque chose est en train de lire activement le répertoire et puisque taille fichier reste ouvert, cela ne le déclenche pas. Ou quelque chose de ce genre.
terdon

Pour autant que je comprends le code de tail, ce n'est pas une dépendance, mais il utilise inotify s'il est disponible, ne recourant au comportement d'interrogation que si inotify n'est pas disponible dans le système. Puisque davfs ne peut pas savoir quand un fichier a changé sans faire une demande explicite, aucun événement inotify n'est généré jusqu'à ce qu'un autre processus demande une actualisation du répertoire. Ce serait bien si tail avait un moyen de forcer l'interrogation, même si inotify est disponible, mais je n'ai pas trouvé un tel paramètre.
jesjimher

3

J'ai répondu à la même question ici avec un script shell complet qui prend l'URL comme argument et tail -fc'est tout. Voici une copie de cette réponse textuellement:


Cela le fera:

#!/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"

Ce n'est pas très convivial sur le serveur Web. Vous pouvez remplacer le truepar sleep 1pour utiliser moins de ressources.

Comme tail -f, vous devez ^Cquand vous avez fini de regarder la sortie, même lorsque la sortie est terminée.


0

boucle avec option de gamme en combinaison avec la montre peut être utilisée pour atteindre cet objectif:

GAMMES

HTTP 1.1 a introduit des plages d'octets. En utilisant cela, un client peut demander à n'obtenir qu'une ou plusieurs sous-parties d'un document spécifié. Curl prend cela en charge avec l'indicateur -r.

watch -n <interval> 'curl -s -r -<bytes> <url>'

Par exemple

watch -n 30 'curl -s -r -2000 http://yoursite.com/log'

Cela récupérera les 2000 derniers octets du journal toutes les 30 secondes.

Remarque: pour l'auto-signature https, utilisez l'option --insecure curl

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.