Терминал прекращает писать свой вывод в файл, если файл изменяется

У меня есть рабочий процесс, который был запущен с помощью

./process | tee -a output.txt

Так как это - довольно долгий процесс, выходной файл является большим и каждый раз, когда я открываю его для проверки, я должен ожидать его, чтобы быть загруженным и затем иметь для прокручивания вниз к нижней части, которая не удобна. Поэтому я решил переместить текущее содержание в файл резервной копии output_bak.txt и оставьте ток output.txt очистите так, чтобы это только содержало новый вывод. К сожалению, это не работало. Процесс не пишет в output.txt больше.

Мой вопрос состоит в том, как позволить процессу продолжить писать в output.txt?

Заранее спасибо за помощь!

Обновление: То, что я подразумевал 'под перемещением содержания', является на самом деле копией содержание файла в другой файл, затем удалите содержание в текущем файле. Более точно то, что я сделал: открытый output.txt, нажмите Ctrl + для копирования содержания затем Ctrl + V в output_bak.txt, затем обратно к output.txt и Ctrl + затем Удаляют и Сохраняют.

0
задан 24 April 2018 в 01:36

1 ответ

Вы не можете. При открытии файла процесс получает дескриптор файла. Дескриптор файла не изменяется, даже если файл перемещен или удален. Таким образом процесс будет писать в тот же дескриптор файла, в который Вы переместились output_bak.txt. Необходимо будет закрыть файл и вновь открыть его.

Можно использовать утилиты Unix как tail просмотреть конец файла. tail -n 20 output.txt произведет последние 20 строк output.txt.

Хвост может также обеспечить предпросмотр в реальном времени. tail -f output.txt покажет содержание, как оно записано в файл в непрерывном потоке, пока Вы не прерываете его Ctrl+c.

Это между прочим, как logrotate работает. Переместите файл, создайте новый пустой файл и перезапустите процесс, пишущий в файл журнала.

2
ответ дан 30 October 2019 в 01:21

Другие вопросы по тегам:

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