做的时候
tail -f /var/log/apache2/access.log
显示日志然后
Killed
我必须重新执行tail -f
才能查看新日志。
如何让tail -f
不断自动地显示日志?
答案 0 :(得分:4)
我要做的第一件事是尝试--follow而不是-f。您的问题可能正在发生,因为您的日志文件正在被撤出。从手册页:
使用--follow(-f),tail默认遵循文件描述符,这意味着即使重命名尾部文件,tail也会继续跟踪其结束。当您确实想要跟踪文件的实际名称而不是文件描述符(例如,日志轮换)时,不希望出现此默认行为。在这种情况下使用--follow = name。这会导致tail以适合重命名,删除和创建的方式跟踪命名文件。*
答案 1 :(得分:2)
tail -f
不应该被杀死。
请使用例如gdb
或strace
找出杀死你尾巴的内容。另外,请检查您的环境,至少ulimit -a
和dmesg
以获取任何线索。
答案 2 :(得分:2)
如果您的描述正确,并且尾部实际显示
Killed
然后它可能不会因日志轮换而发生。日志轮换将导致tail停止显示新行,但即使文件被删除,尾部也不会被终止。
相反,系统上的一些其他进程,或者可能是内核,正在向它发送信号9(SIGKILL)。可能的原因包括:
另一个发出kill -9 1234
或pkill -9 tail
其他一些工具或守护进程(虽然我想不出任何会这样做)
内核本身可以将SIGKILL发送到您的进程。如果OOM(内存不足)杀手被踢入,其中一种情况就是这样做。当使用系统中的所有RAM和交换时,就会发生这种情况。内核将选择一个使用大量内存并将其终止的进程。如果发生这种情况,它将在syslog中可见,但尾部不太可能使用那么多内存。
如果超过RLIMIT_CPU(您的进程使用的CPU时间限制),内核可以向您发送SIGKILL。如果你让尾巴运行足够长时间,并且你有一个ulimit设置,那么这可能会发生。要检查此(以及其他资源限制),请使用ulimit -a
在我看来,这些解释的第一个或最后一个似乎最有可能。
答案 3 :(得分:0)
您需要使用tail -F logfile
,如果日志文件旋转则不会终止。