Хвост -f ломается, когда файл усечен

Я использую tail -f (в терминале на Mac OS X el capitan) для просмотра живых изменений в моем файле (результаты вытаскивания данных из базы данных с использованием сценария PERL). Однако иногда скрипт Perl усекает файл и добавит к нему новые данные. Иногда, когда это происходит, оно дает мне следующее сообщение:

 tail: test.txt: file truncated 

И затем после этого не отображается содержимое файла. Это происходит, только когда я заменяю файл строками LESS, чем раньше. Когда новые строки длиннее, чем перед запуском скрипта, я не получаю эту ошибку, и tail -f продолжает работать. Я подтвердил, что на самом деле есть данные в файле, которые tail -f не показывает после получения этого сообщения (error?).

Я видел этот похожий вопрос: Подавлять сообщения об усечении файла при использовании хвоста

 tail -f test.txt 2> /dev/null 

Но это просто подавляет сообщение и все еще ломается, оно не продолжает показывать мне более короткое, усеченное содержимое файла.

Есть ли более эффективная команда для использования изменений вида просмотра в файле? Или флаг для tail -f не заботится, когда файл усечен?

  • Выход stat на OSX
  • Лучший способ подключения к существующему пользовательскому контексту через SSH
  • Как найти и распечатать конкретные пути к файлам с исключениями?
  • Почему Gnu сортирует сортировку по-разному на моей машине OSX и машине Linux?
  • Возможно ли обновить руководства для MacOS?
  • Разделите текстовый файл на несколько файлов, за пределы {99} лимита csplit
  • Как удалить, без rm / unlink
  • Чтение FreeBSD UFS отформатированного внешнего диска в Mac OS X
  • 3 Solutions collect form web for “Хвост -f ломается, когда файл усечен”

    Как указывали другие, команда tail которая поставляется с OS X, не имеет опции --retry . Однако вы можете просто установить версию хвоста GNU, которая имеет этот параметр; он является частью GNU coreutils . Например, если вы используете MacPorts, вы можете установить их, запустив sudo port install coreutils .

    Альтернативой прямому просмотру файла является команда watch , которая, к сожалению, также не поставляется с OS X. Однако вы можете использовать это обходное решение .

    Вот сценарий tail-F Он принимает один аргумент – файл в хвост. Вероятно, есть лучшие варианты (например, установка tail GNU), но здесь показано, что простые версии инструментов часто могут быть созданы из доступных частей.

     #!/bin/bash # file="$1" size=$(stat -c '%s' "$file" 2>/dev/null) test -z "$size" && echo "No file '$file'" >&2 while sleep 1 do n_size=$(stat -c '%s' "$file" 2>/dev/null) if [[ -n "$n_size" ]] then if [[ 0 == "$size" ]] then # Output whole file (so far) dd bs=1K if="$file" 2>/dev/null size="$n_size" elif [[ "$n_size" > "${size:-0}" ]] then # Output new part of file dd bs="$size" skip=1 if="$file" 2>/dev/null size="$n_size" elif [[ -z "$size" ]] then echo "New file '$file'" >&2 size=0 elif [[ "$n_size" < "${size:-0}" ]] then echo "Rewinding file '$file'" >&2 size=0 fi fi done 

    Следующая команда позволяет повторить попытку файла, даже если он удален или недоступен. Он снова распечатает содержимое после его создания.

     tail -F filename --retry 
    Interesting Posts

    Возможно, неправильно настроена библиотека D-Bus

    «У пакетов есть неудовлетворенные зависимости», но я больше не хочу устанавливать эти пакеты. Как его очистить?

    Как сделать grep на удаленном компьютере и распечатать строку, содержащую эти слова?

    Почему дескриптор dm-crypt не обрабатывает барьеры должным образом?

    Сценарий, чтобы определить, активирован ли интерфейс TAP, созданный службой

    Как удалить строку из тега в сценарии оболочки?

    Часы Gnome в формате UTC, а не локальные

    Как мне настроить настройку vim-pathogen для группы как пользователя без прав root?

    Я редактировал файл Linux с программой Windows, используя подсистему Windows для Linux, и теперь я больше не могу обращаться к ней

    Почему я не могу писать на внешний жесткий диск?

    Какие инструменты позволяют мне отображать man-страницы в формате HTML на веб-сервере?

    cUrl: слишком длинный список аргументов

    Подключение к университетскому WiFi с использованием wpa_supplicant с использованием идентификатора и пароля

    может ли initramfs выгружаться для замены диска?

    Отправить файл через последовательный порт с помощью протокола XMODEM

    Linux и Unix - лучшая ОС в мире.