LINUX.ORG.RU
решено ФорумAdmin

tail: file truncated

 , , ,


0

2

Доброе утро, всезнающий All!

Для получения логов тестов, гоняющихся на машине с Windows 2012R2, выводом на TeamCity, использую довольно велосипедный pipeline, который до последнего шага работал вполне себе стабильно. Код с помощью Ansible утягивается на виндовую ВМ, воссозданную из снапшота, там разворачивается, запускаются тесты и пишут в лог. Запускается примерно так:

mvn -pl tests -am clean test -l C:\path\to\log.txt

Пишется всё это в расшаренную папку, которую я на агенте подключаю и потом читаю лог tail'ом. Однако в какой-то момент выводится сообщение

tail: /home/test/mount/log.txt: file truncated
После чего весь файл считывается заново, и TeamCity неправильно воспринимает вывод. Почитал по этой проблеме в интернетах, говорят, это из-за того, что вывод не добавляется в конец файла, а файл сохраняется, открывается и пишется заново. Попробовал сделать вывод простым перенаправлением в файл >>, пока полёт нормальный.

Пытаюсь понять, у опции mvn

-l, --log-file
такое поведение нормальное или проблема может быть в чем-то другом?

К сожалению, перенаправление не помогло, на второй час прогона (да-да, вы не ослышались) появилась та же проблема.

KroArtem ★★
() автор топика

man tail

     -F      The -F option implies the -f option, but tail will also check to
             see if the file being followed has been renamed or rotated.  The
             file is closed and reopened when tail detects that the filename
             being read from has a new inode number.

             If the file being followed does not (yet) exist or if it is
             removed, tail will keep looking and will display the file from
             the beginning if and when it is created.

             The -F option is the same as the -f option if reading from
             standard input rather than a file.

system-root ★★★★★
()
Ответ на: комментарий от system-root

Не очень понимаю, как это поможет. С этой опцией всё так же ошибка tail: file truncated и считывается всё заново. А мне заново не нужно

KroArtem ★★
() автор топика
Ответ на: комментарий от KroArtem

вывод не добавляется в конец файла, а файл сохраняется, открывается и пишется заново

флаг -F как раз для таких случаев, но на сколько я знаю, он использует inotify
inotify не работает для CIFS, т.е. если ты монтируешь логи которые лежат на винде к машине на линуксе и уже там смотришь tail'ом, то работать не будет.

system-root ★★★★★
()
Ответ на: комментарий от system-root

Да, в моём случае становится ещё хуже, чем при использовании -f. А есть какой-нибудь пусть и дубовый, но железно работающий вариант?

Действительно используется CIFS.

KroArtem ★★
() автор топика
Ответ на: комментарий от KroArtem

если не городить систем логирования, можно скачать tail и nc под винду.
на винде: tail -F C:\path\to\log.txt | nc linux_host 3333
на линуксе: nc -l 3333

system-root ★★★★★
()
Ответ на: комментарий от KroArtem

Еще как вариант пойти обратным путем, на онтопике поднять самбу и с оффтопика писать логи в шару самбы.

anc ★★★★★
()
Ответ на: комментарий от anc

Я уже некоторые варианты перепробовал. Поднимал sshfs и всё видел на стороне Linux, но невозможно открывать или читать файл, в который идет запись на Windows.

Настраивал ssh, подключался и читал файл так же tail'ом, работало хорошо при ручном запуске, но при запуске сборки на teamcity вывод не перенаправлялся.

Попробую добить вариант с netcat, потому что поднимать самбу на оффтопике, наверное, не очень быстро, а время тикает.

KroArtem ★★
() автор топика
Ответ на: комментарий от KroArtem

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

Вы опечатались или не правильно поняли? Поднимаем самбу на онтопике, и в винде пишем на эту шару, т.е. наоборот от того как реализовано у вас (виндовая шара монтируется в линукс)

anc ★★★★★
()
Ответ на: комментарий от system-root

Не взлетело. На TeamCity (Linux) делаю шаг, который запускает скрипт

#!/bin/bash
nc -l 3333

На оффтопике стартует скрипт, который, собственно, делает

 tail -F C:\path\to\log.txt | nc linux_host 3333 

Для проверки сделал два одинаковых последовательных шага, начинаю читать результаты, в этот момент руками захожу на оффтопик и запускаю .bat

В обоих случаях прилетает 1 огрызок файла и Process exited with code 0

Посмотреть на всю боль можно здесь: http://imgur.com/a/GhSeG

KroArtem ★★
() автор топика
Ответ на: комментарий от anc

Ваш вариант отработал идеально. Сейчас ещё добавлю

 | sed '/^Finished at: / q' 
чтобы корректно завершаться и (надеюсь) всё будет замечательно.

Спасибо большое за совет!

KroArtem ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.