Вполне возможно, что хвост может излучать «неразборчивую линию» - но только в том случае недействительные строк записываются в файл. Вид круговой немного аргумент, но вот пример того, как это могло произойти:
Вы хвост -f на/вар/Журнал/Syslog
Syslog-нг умирает в середине block-spanning write (секторы составляют 512 байт, размер блока файловой системы, скорее всего, больше, хотя, вероятно, не намного больше 4096 .. поэтому syslog имеет 9k данных, буферизованных для записи, он получает через 4k байт страницу и до этого может записать следующие 4k + 1k syslog. По крайней мере на ext2, это закончится как частичная запись даже после fsck. ext3? .. heh. Я так долго встраивал, что не могу вспомнить. Но я бы НАДЕЖДЫ не .. Но кто скажет, что данные, которые вы пишете, всегда будут верный? Вы можете получить нефатальную ошибку форматирования строки, которая не включает новую строку, которую вы ожидаете.
После этого вы получите частичную строку, которая не будет завершена символом новой строки (или даже \ 0), и в следующий раз, когда syslog запустится и начнет добавление, он будет просто добавляться в конце файл без понятия «действительных» записей. Итак, первая новая запись будет мусором, но следующая будет в порядке.
Это легко осуществить ..
В одном окне
tail -f SOMEFILE
В другом окне
echo FOO >>SOMEFILE
echo BAR >>SOMEFILE
printf NO_NEWLINE >>SOMEFILE
echo I_WILL_HAVE_THE_LAST_LINE_PREFIXED_TO_ME_CAUSING_NERD_RAGE >>SOMEFILE
Поскольку хвост Linux использует Inotify по умолчанию, все, что чтение будет получать последнюю строку без новой строки и ждать, пока Следующая новая строка появляется при добавлении NO_NEWLINE к началу того, что он считает «последней строкой».
Если вы хотите сделать это «путинским» способом, если вы используете Linux - используйте inotify, если вы используете OSX или BSD, используйте «knotty» и отрицайте использование «хвоста» в качестве входного канала и просто просмотрите файл самостоятельно.
Хвост может сделать странные вещи, если вы также используете «resync on truncate» - то есть, если файл обнуляется и перезапускается в середине чтения, вы можете получить некоторый странный объем данных при чтении с «хвоста», закроет ранее открытый дескриптор файла взамен нового.
Хотя это возможно, очень редко. Я предполагаю, что шансы намного выше, чем на скрипте python у респондента. – Perry
@Perry, я обновил вопрос и добавлю код, который я использовал для чтения журналов. – satoru
Вы уверены, что строки в вашем журнале являются значениями, разделенными запятой? – Perry