Единственная ссылка на "Traceping", который я мог найти, была этим, который обращается к приложению для Android. В основном это выполняет a traceroute
для обнаружения всех транзитных участков между местоположением и целевым IP, затем непрерывно проверяет с помощью ping-запросов каждый хост для предоставления Вам больше информации о качестве соединения.
Если Вы не поняли слова того, что я просто сказал, Вам, вероятно, не нужен инструмент.
Судя его описанием, если Вы хотите схожую функциональность в полной системе Linux, Ваш лучший выбор является MTR, который включен в в значительной степени каждое распределение, стоящее имени, которое активно не идет для абсолютно минимального места дискового пространства.
Принятие your-filter
считывает его данные с stdin:
while your-filter; do
sleep 60
done < file.log
Это принимает your-filter
просто считывает данные и не пытается lseek
в нем, например.
Теперь, для решения проблемы вращения журнала, если на Linux (где, вопреки большинству других систем, /dev/fd/n
символьные ссылки на фактические файлы), с ksh
, bash
, zsh
, dash
, yash
(большая часть POSIX окружает кроме наиболее педантично POSIX как posh
как -ef
не POSIX):
while your-filter; do
if [ file.log -ef /dev/stdin ]; then
sleep 60
else
exec < file.log
fi
done < file.log
После вращения журнала, которое звонило бы your-filter
дважды, если Вы быть бы то, чтобы он был названным однажды с конкатенацией старого и нового:
while
if [ file.log -ef /dev/stdin ]; then
your-filter
else
exec 3<&0 < file.log
(cat <&3; cat) | your-filter &&
exec 3<&-
fi
do
sleep 60
done < file.log
Теперь после вращения журнала, может быть время, когда старый file.log был переименован, но новое file.log
не созданный все же, в этом случае вышеупомянутое перестанет работать, если оно сделает exec < file.log
в ту же минуту. Затем Вы могли зафиксировать это с:
while
if [ file.log -ef /dev/stdin ] || ! command exec 3< file.log; then
your-filter
else
(cat; cat <&3) | your-filter &&
exec <&3 3<&-
fi
do
sleep 60
done < file.log
Таким образом, это продолжает читать старый файл, пока новый не обнаруживается.
command
необходим для предотвращения exec
заставить оболочку выходить, когда это перестало работать (поскольку POSIX требует). Это не нужно с zsh
или bash
если не в sh
режим.
Теперь, мы спим в течение 60 секунд в цикле, и your-filter
мог бы занять несколько секунд для выполнения. Если это важно для your-filter
выполняться каждую минуту в среднем, с ksh
, bash
или zsh
, Вы могли изменить его на:
t=$SECONDS
while
if [ file.log -ef /dev/stdin ] || ! command exec 3< file.log; then
your-filter
else
(cat; cat <&3) | your-filter &&
exec <&3 3<&-
fi
do
t=$(($t + 60))
sleep "$((t - SECONDS))"
done < file.log
С ksh93
и zsh
, и обеспеченный Ваш sleep
принимает аргументы с плавающей точкой, Вы могли работать typeset -F SECONDS
.
tail -F | while sleep 60; …
? – Gilles 'SO- stop being evil' 15.08.2013, 00:35your-filter
заблокировался бы, поскольку это никогда не будет видеть конец файла. – Stéphane Chazelas 15.08.2013, 00:37tail -F | while true; do timeout 60 cat | your-filter; done
. Я получаю впечатление, что Вы повторно реализуетеtail -F
. (Мобильность могла быть причиной этого, конечно.) – Gilles 'SO- stop being evil' 15.08.2013, 00:41cat
, чтобы заставить его прекратить читать, он - stdin, и сделатьyour-filter
замеченный EOF, корректный? Btw, я думаю, что это не будет работать еслиlogrotate
перемещенияfile.log
использованиеmv
вместо того, чтобы копировать его и создать новый файл.tail
не будет видеть, что файл переместился, корректный? – Nitzan Shaked 15.08.2013, 08:03