Прекрасен это для использования хвоста-f на больших файлах журнала

Я удивлен, что никто не прокомментировал /user все же. Этот очевиден: потому что это не "пользователь", это - "Универсальные Системные ресурсы".

Что касается /tmp, это просто короче и легче ввести. C программисты имеют привычку к использованию кратких названий, когда возможный, потому что они заканчивают тем, что много раз вводили их в программе. Это очень распространено, имеют временную переменную, названную "tmp", а не "временным файлом" по той же причине, Вы используете "i" я для индекса в для цикла вместо "индекса" или "счетчика".

9
18.09.2018, 18:40
3 ответа

В моей системе Linux (GNU coreutils 8.12) я смог проверить (использование strace) это tail -f¹ использует lseek системный вызов для перескакивания через большую часть файла быстро:

lseek(3, 0, SEEK_CUR)                   = 0
lseek(3, 0, SEEK_END)                   = 194086
lseek(3, 188416, SEEK_SET)              = 188416

Это означает, что размер отслеженного файла не должен иметь значения в так или иначе.

Возможно, можно проверить, применяется ли то же на систему. (Очевидно, это должно иметь место.)


1. Я также пытался отключить поддержку inotify с недокументированным ---disable-inotify, на всякий случай.

6
27.01.2020, 20:06
  • 1
    Настоящие Мужчины читают источник (: –  Gilles 'SO- stop being evil' 08.09.2011, 03:14
  • 2
    @Gilles. Я не могу преподавать OP (или читатель), как считать источник, если он уже не знает. Намного легче сказать ему использовать strace ;) –  Stéphane Gimenez 08.09.2011, 03:20
  • 3
    На самом деле, в системе, где tail -F не поддерживается, возможности - это strace не доступный … –  Stéphane Gimenez 08.09.2011, 03:23
  • 4
    truss соответствующая утилита на Солярисе. –  Gilles 'SO- stop being evil' 08.09.2011, 03:28
  • 5
    и это показывают подобный, ищут вызовы. llseek (0, 0, SEEK_CUR) = 0, llseek (0, 0xFFFFFFFFFFF5FFF6, SEEK_END) = 7 923 269 –  jlliagre 08.09.2011, 03:49

Если это вызывается на регулярный файл (в противоположность каналу), и хвост GNU и хвост OpenBSD (если не названо с -n +N) ищите в конец файла, затем работайте назад для нахождения строки, где это должно начать печатать. Я не знаю, делает ли Солярис то же, но это - разумный подход, таким образом, я ожидаю, что большинство нельдов сделает то же. Поэтому размер файла не важен для производительности.

5
27.01.2020, 20:06

Я делаю это каждый день. Я обычно сканирую приблизительно дюжину входа в систему наше использование тестовых и рабочих серверов tail -f logs/*.{log,err,out}. Начальная загрузка - слишком (в зависимости от количества файлов globbed), но после этого, потоковая передача в реальном времени.

Вместо того, чтобы отправить к grep, я использую exec функциональность в screen так как я хочу обычно видеть весь вывод (для полного tracebacks и сообщений, связанных с проблемой). Например,

!:sed -n s/.*Exception.*/\007/p

Заставить терминал подавать звуковой сигнал (или флэш-память) каждый раз, когда слово Исключение найдено.

2
27.01.2020, 20:06

Теги

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