是否可以将符号链接“滚动”到新文件而不影响任何打开的文件句柄?

mat*_*t b 7 logs tail symlink

我在本地开发的应用程序将其输出记录到使用当前时间戳格式化的文件中,例如app-%Y%m%d.log.

为了使能够在终端窗口中跟踪当前日日志变得简单,我有一个名为的符号链接current.log,指向今天的日志。

每天开始工作时,我需要杀死尾部进程,将符号链接指向今天的文件,然后重新运行命令到tail -f current.log.

是否可以在无需重新启动的情况下更改符号链接的目标tail- 通过更改文件句柄的目标而tail不是更明智?

为了自动执行这个“新工作日开始”任务,很容易设置一个 cron'ed 脚本来将符号链接指向今天的文件,但似乎现有tail流程不知道目标已经改变。

Kei*_*thB 7

我认为这是不可能的,除非您可以定期关闭并重新打开文件。一个尾部(或任何其他程序)打开一个文件,它获得该文件的 inode 的句柄。此时,不再查询文件名和链接。这就是为什么您可以从文件系统中删除文件,并且任何打开该文件的程序都将继续工作。只有当 ;ast 程序关闭文件时,它才会真正从磁盘中删除。

更新:至少 OS X 上的版本尾部有一个 -F 选项,如果文件已移动,它将重新打开文件。

  • `tail -F` 在 Fedora 中也能正常工作;关于 OS X 的提示给了我足够的提示,可以在我的系统上检查它。这是实现我想要做的事情的最佳答案(即使文件更改了名称,也要继续跟踪文件);似乎很清楚我关于符号链接的根本问题的答案是“否”。谢谢! (2认同)