![NFS 客户端重置另一个 NFS 客户端文件指针](https://linux22.com/image/153652/NFS%20%E5%AE%A2%E6%88%B7%E7%AB%AF%E9%87%8D%E7%BD%AE%E5%8F%A6%E4%B8%80%E4%B8%AA%20NFS%20%E5%AE%A2%E6%88%B7%E7%AB%AF%E6%96%87%E4%BB%B6%E6%8C%87%E9%92%88.png)
我有一个设备,可以将日志写入 nfs 安装点上的日志文件。它“永远”写入同一个日志文件,导致文件变得非常大。
我有一个执行日志轮换的脚本(在另一个 nfs 客户端上运行),这样我就有较小的每日日志文件。当我完成日志轮换后,我想强制设备的文件指针指向文件的开头,以便设备再次开始在日志文件的开头写入。
这将需要 nfs 客户端执行日志轮转,对日志文件执行“某些操作”(不确定是什么),这将强制其他 nfs 客户端(写入设备)将其文件指针设置为文件的开头。
我的理解是这是不可能的,因为每个 nfs 客户端独立维护它自己的文件指针。
我错了吗?这可以做到吗?
答案1
通常日志轮换需要终止正在写入日志文件的进程。该命令的手册页logrotate
可能会有所帮助。
假设进行写入的设备也是 Unix 或 Linux 类型的系统,写入文件的进程将继续向文件写入数据,直到关闭文件。即使该文件在 NFS 服务器上被删除或重命名,该进程仍将继续写入该文件。
我的理解是这是不可能的,因为每个 nfs 客户端独立维护它自己的文件指针。
您的理解通常是正确的,但即使所有进程都在同一台计算机上并且不涉及 NFS,情况也是如此。
这就是 i/o 子系统在 Unix/Linux 系统上的工作方式。您不能强制修改进程中的文件指针。
但是,如果您可以在 NFS 客户端和服务器之间放置一个代理,那么该代理可能可以缓冲数据或重定向到临时文件,并有足够的时间来关闭文件并轮换。 NFS 代理的一个示例是 NFSexhttp://nfsex.sourceforge.net/尽管它为 Windows 实现了 NFS 预读和后写,但该网页上的图表显示了这个想法。我的某人已经这样做了,这似乎是合理的,但我不知道有任何实施。