файлы монитора (а-ля хвост-f) во всем каталоге (даже новые)

Существуют довольно многие:

  • Vimprobable - WebKit и подобные Энергии привязки клавиш. Существует двух версий.

  • dwb - веб-браузер мозаичного размещения разрабатывается пользователем Linux Дуги (снова, WebKit)

  • Conkeror - если Вы предпочитаете привязку Emacs

  • Перемещение - другой кормит грудью продукт...

  • xombrero - "минималистский веб-браузер со сложными разработанными средствами защиты - в" (от связанной страницы Wiki)

54
10.08.2017, 11:38
7 ответов

Можно выследить несколько файлов с … мультихвостом.

multitail -Q 1 'directory/*'

-Q 1 PATTERN средства проверить на новое содержание в существующих или новых файлах, соответствующих, КОПИРУЮТ каждую 1 секунду. Строки из всех файлов показывают в том же окне, используют -q вместо -Q иметь отдельные окна.

45
27.01.2020, 19:33

Никакая идея о решении для оболочки, но (принятие Linux1) inotify мог быть способ пойти... посмотрите, что этот пример подражает tail -F (использование pyinotify), возможно, это может использоваться в качестве основания для следующего весь каталог.

В целом, inotify может контролировать каталоги (цитирование man 7 inotify)

Следующие биты могут быть указаны в маске при вызове inotify_add_watch (2) и могут быть возвращены в поле маски, возвращенном чтением (2):

IN_ACCESS         File was accessed (read) (*).
IN_ATTRIB         Metadata changed, e.g., permissions, timestamps,
                    extended attributes, link count (since Linux 2.6.25),
                    UID, GID, etc. (*).
IN_CLOSE_WRITE    File opened for writing was closed (*).
IN_CLOSE_NOWRITE  File not opened for writing was closed (*).
IN_CREATE         File/directory created in watched directory (*).
IN_DELETE         File/directory deleted from watched directory (*).
IN_DELETE_SELF    Watched file/directory was itself deleted.
IN_MODIFY         File was modified (*).
IN_MOVE_SELF      Watched file/directory was itself moved.
IN_MOVED_FROM     File moved out of watched directory (*).
IN_MOVED_TO       File moved into watched directory (*).
IN_OPEN           File was opened (*).

При контроле каталога события, отмеченные со звездочкой (*) выше, могут иметь место для файлов в каталоге, в этом случае поле имени в возвращенной inotify_event структуре определяет название файла в рамках каталога.

(... и pyinotify тесно следует за опциями тезисов),

1: BSDs имеют подобную вещь, kqueue. Возможно, межплатформенным решением является достижимое использование GIO (привязка Python) как уровень абстракции, так как это может, около inotify, также используйте kqueue

7
27.01.2020, 19:33

xtail также альтернатива. Его страница справочника описывает это как:

Xtail контролирует один или несколько файлов и отображает все данные, записанные в файл начиная с вызова команды. Это очень полезно для контроля нескольких файлов журнала одновременно. Если запись, данная на командной строке, будет каталогом, то все файлы в том каталоге будут контролироваться, включая созданных после xtail вызова. Если запись, данная на командной строке, не будет существовать, то xtail будет наблюдать за нею и контролировать, это когда-то создало. При переключении файлов в дисплей печатается баннер, показывающий путь файла.

Символ прерывания (обычно CTRL/C или DEL) отобразит список последний раз измененных наблюдаемых файлов. Отправьте сигнал выхода (обычно CTRL/backslash) для остановки xtail.

10
27.01.2020, 19:33

Я написал быстрое письмо, которое удовлетворяет потребность.

#!/bin/bash
LOG_PATTERN=$1
BASE_DIR=$(dirname $LOG_PATTERN* | head -1)

run_thread (){
    echo Running thread
    tail -F $LOG_PATTERN* &
    THREAD_PID=$!
}

# When someone decides to stop the script - killall children
cleanup () {
    pgrep -P $$ | xargs -i kill {}
    exit
}

trap cleanup SIGHUP SIGINT SIGTERM

if [ $# -ne 1 ]; then
    echo "usage: $0 <directory/pattern without * in the end>"
    exit 1
fi

# Wait for the directory to be created
if [ ! -d $BASE_DIR ] ; then
    echo DIR $BASE_DIR does not exist, waiting for it...
    while [ ! -d $BASE_DIR ] ; do
        sleep 2
    done
    echo DIR $BASE_DIR is now online
fi

# count current number of files
OLD_NUM_OF_FILES=$(ls -l $LOG_PATTERN* 2>/dev/null | wc -l)

# Start Tailing
run_thread

while [ 1 ]; do
    # If files are added - retail
    NUM_FILES=$(ls -l $LOG_PATTERN* 2>/dev/null | wc -l)
    if [ $NUM_FILES -ne $OLD_NUM_OF_FILES ]; then
        OLD_NUM_OF_FILES=$NUM_FILES
        kill $THREAD_PID
        run_thread
    fi
    sleep 1
done
2
27.01.2020, 19:33

Также вы можете просматривать каталог с помощьюwatch

watch -n0,1 "ls -lrt /directory/ | tail"
4
20.08.2021, 13:25

Это работает рекурсивно.

Он используетinotify(apt-get install inotify-utilsв Debian )и просто перезапускает команды tailпри обнаружении новых файлов/каталогов.

#!/bin/bash
logDir=/var/log/
while true; do
        ( find "$logDir" -type f -print0 | xargs -0 tail --verbose --follow --lines=0 )&
        tailPid=$!
        inotifywait --recursive --quiet --event create --format=%w%f "$logDir" | tr \\n \\0 | xargs -0 tail --verbose
        kill $tailPid
done

Мой вариант использования заключался в перенаправлении всех журналов в /dev/stderrвнутри контейнера докера, чтобы они отображались в docker-compose logs -f.

2
20.08.2021, 13:25

Вот сценарий bash, который также использует inotifywait. Он следит за любым новым или измененным файлом и запускает tail --verbose -n {NN}для этого файла, который печатает имя файла и последние NNстроки.

#!/usr/bin/bash
NLINES=75
function usage() {
  echo "Usage: $0 {folder} [#lines]
  Monitor {folder} and execute 'tail -n [#lines]'
  for any new or modified files.
  Default [#lines] is $NLINES.
"
  exit 1
}
[[ ! -z $1 ]] || usage
[[ -d $1 ]] || {
  echo "ERROR: $1 is not a a folder."
  usage
}
[[ -z $2 ]] || {
  [[ $2 =~ ^[0-9]+$ ]] && NLINES=$2 || {
    echo "ERROR: [#lines] must be an integer"
    usage
  }
}
inotifywait -m -e modify -e create --format=%w%f $1 | xargs -d '\n' -n 1 tail --verbose -n $NLINES
1
20.08.2021, 13:25

Теги

Похожие вопросы