如果文件发生更改,终端将停止将其输出写入文件

如果文件发生更改,终端将停止将其输出写入文件

我有一个正在运行的进程,它是使用

./process | tee -a output.txt

由于这是一个相当漫长的过程,输出文件很大,每次打开检查时,我都必须等待它加载,然后必须向下滚动到底部,这很不方便。因此,我决定将当前内容移动到备份文件中,output_bak.txt并将当前内容留空,output.txt以便它只包含新输出。不幸的是,这没有奏效。该过程不再写入output.txt

我的问题是如何让进程继续写入output.txt

预先感谢您的帮助!

更新:我所说的“移动内容”实际上是将文件的内容复制到另一个文件中,然后删除当前文件中的内容。更准确地说,我所做的是:打开output.txt,按Ctrl + A复制内容,然后按Ctrl + V进入output_bak.txt,然后返回output.txt并按Ctrl + A,然后删除并保存。

答案1

不能。打开文件时,进程会获取文件句柄。文件句柄不会改变即使文件被移动或删除。因此,该过程将写入您移动到的同一文件句柄output_bak.txt。您必须关闭文件并重新打开它。

您可以使用 unix 实用程序(例如)tail来查看文件末尾。tail -n 20 output.txt将输出最后 20 行output.txt

Tail 还可以提供实时视图。tail -f output.txt将以连续流的形式显示写入文件的内容,直到您使用Ctrl+中断它c

顺便说一下,这就是 logrotate 的工作原理。移动文件,创建一个新的空文件,然后重新启动写入日志文件的过程。

相关内容