io方向操作会锁定文件吗?

时间:2019-01-04 06:21:20

标签: linux redirect io truncate

我已经有一个增长的nginx日志文件,大约 20G ,并且希望对其进行轮换。

1,我mv将旧的日志文件更改为新的日志文件

2,我用> old_log_file.log在大约2到3秒的时间内截断了旧的日志文件

如果我执行截​​断操作(大约2到3秒),旧日志文件上是否有锁(写锁?)?

在2到3s的时间内,nginx返回502,等待将日志追加到旧的日志文件中,直到锁定被释放?

感谢您的解释。

2 个答案:

答案 0 :(得分:1)

是否锁定文件取决于应用程序。生成此日志文件的应用程序必须具有清除日志文件的选项。一个例子是在编辑器中,就像vim文件可以在编辑器中仍然打开时可以对其进行外部修改。

答案 1 :(得分:1)

在Linux上,(几乎)没有强制性的file locks(更确切地说,内核中曾经有一些mandatory locking feature,但已弃用了它,您实际上应该避免使用它)。文件锁定发生在flock(2)lockf(3)上,并且是建议且应显式(例如,使用flock(1)命令或某些程序调用flocklockf)。

因此,与文件相关的每个锁定实际上都是使用该文件的所有软件之间的一个约定(并且mv(1)或您的shell重定向不使用文件锁定)。

请记住,Linux上的文件主要是i-node(请参阅inode(7)),该文件可以具有零个,一个或几个文件路径(请参阅path_resolution(7),并应注意{{3} },link(2)rename(2))并使用了一些unlink(2)。阅读file descriptor(也许还有ALP)。

在您遇到问题的情况下不会发生文件锁定(并且涉及的i节点和文件描述符是独立的)。

考虑使用Operating Systems: Three Easy Pieces

某些软件提供了一种重新加载其配置并重新打开日志文件的方法。您应该阅读logrotate(8)的文档。