Есть ли способ контролировать такой ресурс, как http://someserver.com/logs/server.log ?
Это то, что я бы сделал для локального файла.
tail -F /var/logs/somefile.log
Я хотел бы что-то подобное для файла, доступного по протоколу http
Это сделает это:
#!/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
когда вы закончили смотреть вывод, даже когда вывод сделан.
Вы можете использовать скрипт из https://stackoverflow.com/a/1102346/401005 если вы умеете запускать скрипты php. Вам следует добавить flush();
после echo
.
Когда используешь curl --no-buffer http://the/url
у вас должен быть подходящий результат
я стараюсь htail
(https://github.com/vpelletier/htail), и, похоже, он неплохо справляется со своей задачей.
Если вам нужен тип дозорной программы, как мне было нужно (обновлять только при ответе)
#!/bin/bash
while true; do
echo "y to curl, n to quit"
read -rsn1 input
if [ "$input" = "y" ]; then
curl $1
elif [ "$input" = "n" ]; then
break
fi
done
Тогда беги curlTail.sh http://wherever
Ты получишь
18:02:44] $: ~ \> curlTail.sh http://wherever
y to curl, n to quit
Когда вы нажмете y, он скрутит его, а затем снова предложит вам.
Я написал простой сценарий bash для получения содержимого URL каждые 2 секунды и сравнения с локальным файлом output.txt
затем добавьте разницу в тот же файл
Я хотел транслировать журналы расширения AWS в моем конвейере Jenkins
while true; do comm -13 --output-delimiter="" <(cat output.txt) <(curl -s "$URL") >> output.txt; sleep 2; done
не забудьте создать пустой файл output.txt
файл сначала
: > output.txt
просмотреть трансляцию:
tail -f output.txt
Лучшее решение:
Я нашел лучшее решение, используя wget здесь:
while true; do wget -ca -o /dev/null -O output.txt "$URL"; sleep 2; done