У меня есть процесс на хосте № 1, который периодически добавляется в файл - foo.log.
У меня есть процесс на хосте № 2, который имеет доступ к foo.log через монтирование samba. И я вызываю tail -F для этого файла, чтобы наблюдать его вывод в реальном времени.
Некоторые строки "потеряны" или отброшены хвостом -F.
Исследование с использованием strace показывает, что некоторые операции read () возвращаются с набором нулевых байтов.
nanosleep({1, 0}, NULL) = 0
fstat(3, {st_mode=S_IFREG|0660, st_size=54526947, ...}) = 0
read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 8192) = 630
read(3, "", 8192) = 0
Конечно, некоторые строки возвращаются правильно, поэтому не всегда эти блоки равны нулю.
Кроме того, та же самая команда strace, вызываемая непосредственно в файловой системе хоста № 1, на которой размещается foo.log, никогда не отображает этот блок чтения нулевого байта из strace.
Как будто сервер samba на хосте # 1 может видеть изменение размера файла, но не может видеть содержимое в режиме реального времени. Если бы самба подождала секунду и попробовала еще раз, держу пари, что содержимое будет там.
Есть ли способ включить samba для включения tail -F для файлов в режиме реального времени без удаления строк?