tail -f总是显示“Killed”

时间:2014-04-10 12:43:27

标签: linux shell command-line tail

做的时候

tail -f /var/log/apache2/access.log

显示日志然后

Killed

我必须重新执行tail -f才能查看新日志。

如何让tail -f不断自动地显示日志?

4 个答案:

答案 0 :(得分:4)

我要做的第一件事是尝试--follow而不是-f。您的问题可能正在发生,因为您的日志文件正在被撤出。从手册页:

  

使用--follow(-f),tail默认遵循文件描述符,这意味着即使重命名尾部文件,tail也会继续跟踪其结束。当您确实想要跟踪文件的实际名称而不是文件描述符(例如,日志轮换)时,不希望出现此默认行为。在这种情况下使用--follow = name。这会导致tail以适合重命名,删除和创建的方式跟踪命名文件。*

答案 1 :(得分:2)

tail -f不应该被杀死。

不过,尾巴不会自杀,它会被某种东西杀死。例如,系统内存不足或资源限制过于严格。

请使用例如gdbstrace找出杀死你尾巴的内容。另外,请检查您的环境,至少ulimit -admesg以获取任何线索。

答案 2 :(得分:2)

如果您的描述正确,并且尾部实际显示

Killed

然后它可能不会因日志轮换而发生。日志轮换将导致tail停止显示新行,但即使文件被删除,尾部也不会被终止。

相反,系统上的一些其他进程,或者可能是内核,正在向它发送信号9(SIGKILL)。可能的原因包括:

  • 另一个发出kill -9 1234pkill -9 tail

  • 等命令的终端中的用户
  • 其他一些工具或守护进程(虽然我想不出任何会这样做)

  • 内核本身可以将SIGKILL发送到您的进程。如果OOM(内存不足)杀手被踢入,其中一种情况就是这样做。当使用系统中的所有RAM和交换时,就会发生这种情况。内核将选择一个使用大量内存并将其终止的进程。如果发生这种情况,它将在syslog中可见,但尾部不太可能使用那么多内存。

  • 如果超过RLIMIT_CPU(您的进程使用的CPU时间限制),内核可以向您发送SIGKILL。如果你让尾巴运行足够长时间,并且你有一个ulimit设置,那么这可能会发生。要检查此(以及其他资源限制),请使用ulimit -a

在我看来,这些解释的第一个或最后一个似乎最有可能。

答案 3 :(得分:0)

您需要使用tail -F logfile,如果日志文件旋转则不会终止。