在我的 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
等...我无法完全弄清楚我需要用我拥有的有限命令做什么:(
最佳答案
日志是如何轮换的?您使用的是 logrotate
实用程序吗?
如果是,您是否尝试将您的行添加到配置文件中的 postrotate
部分?
来自 man logrotate
后旋转/结束脚本 postrotate 和 endscript 之间的线(两者都必须 单独出现在行上)在日志文件之后执行 被旋转。这些指令可能只出现在日志中 文件定义。另见预旋转。
关于Linux tail 使用 busybox 旋转日志文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45074111/