我正在使用 查看日志文件 (logfile.log) tail -f
,几分钟后,以下消息写入该文件:
tail: logfile.log: file truncated
我以前从未见过这种情况,我想知道为什么会发生这种情况,以及如何防止这种情况发生。该文件由 root 写入(通过 cronjob),并由另一个用户创建。
似乎 cronjob 实际上每次都会覆盖日志文件。我猜这可能是我看到该消息的原因。
编辑这个 cronjob 看起来是这样的:
* * * * * /usr/local/bin/ruby /home/web/script.rb > >/home/web/logfile.log 2>&1
答案1
我不知道这是否只是打字错误。。但难道不应该..../script.rb >> /home/web/logfile.log
正确地附加吗?您的代码似乎在双尖括号之间有一个空格
我刚刚在 Mac 上的 Bash 上尝试过,它提示错误,也许有些 Shell 可能会在这种情况下忽略第二个箭头
答案2
每man 1 tail
:
-f The -f option causes tail to not stop when end of file is reached, but rather to wait for additional data to be appended to the input. The -f option is ignored if the standard input is a pipe, but not if it is a FIFO.
-F The -F option implies the -f option, but tail will also check to see if the file being followed has been renamed or rotated. The file is closed and reopened when tail detects that the filename being read from has a new inode number. The -F option is
ignored if reading from standard input rather than a file.
换句话说,使用tail -F logfile.log
而不tail -f logfile.log
应该得到file truncated
消息......
答案3
>>
值得一提的是,即使我正确使用(或其他附加方法,例如) ,我也遇到过这种情况tee -a
。在这些情况下,问题在于另一个进程正在写入同一个文件,没有附加。
在这种情况下,您可能可以通过 轻松发现该过程ps
,但如果不能,这个答案对调查哪些进程正在访问文件的方法进行了一些讨论。