在我的bash脚本中,我试图从/ var / log / message日志文件中监视出来 - 并且即使文件旋转(重新创建并重新启动)也会继续。我尝试使用tail -f filename
,但很快意识到这对文件旋转没有好处。
因此,使用tail -F filename
或tail -f --retry filename
(以及其他一些变体)有很多答案。
但是在我的嵌入式Linux上,我使用的是busybox,它有一个轻量级的tail:
tail [OPTIONS] [FILE]...
Print last 10 lines of each FILE to standard output. With more than one
FILE, precede each with a header giving the file name. With no FILE, or
when FILE is -, read standard input.
Options:
-c N[kbm] Output the last N bytes
-n N[kbm] Print last N lines instead of last 10
-f Output data as the file grows
-q Never output headers giving file names
-s SEC Wait SEC seconds between reads with -f
-v Always output headers giving file names
If the first character of N (bytes or lines) is a '+', output begins with
the Nth item from the start of each file, otherwise, print the last N items
in the file. N bytes may be suffixed by k (x1024), b (x512), or m (1024^2).
所以我无法执行通常的tail -F ...
,因为该选项未实现。上面的文档片段是最新的busybox版本 - 我的版本有点旧。
所以我需要另一种记录/ var / log / messages的方法,因为文件被覆盖了一定的大小。
我在想一些简单的bash系列。所以我看到像inotifywait这样的东西,但busybox没有。我看了看这里:
busybox docs并且有一个inotifyd,但我的版本没有那个特定的命令。所以,如果有一个聪明的方法可以通过简单的Linux命令/ watch
和tail -f
和cat/less/more
之类的命令组合来实现这一点...我无法弄清楚我需要用有限的命令做什么:(
答案 0 :(得分:0)
日志如何旋转?您使用的是logrotate
实用程序吗?
如果是,您是否尝试将行添加到配置文件中的postrotate
部分?
postrotate / endscript postrotate和endcript之间的界限(两者都必须 在日志文件之后执行 旋转。这些指令可能只出现在日志中 文件定义。参见prerotate。