首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >tail -f总是显示"Killed“

tail -f总是显示"Killed“
EN

Stack Overflow用户
提问于 2014-04-10 20:43:27
回答 4查看 579关注 0票数 1

在做的时候

代码语言:javascript
复制
tail -f /var/log/apache2/access.log

它显示日志,然后

代码语言:javascript
复制
Killed

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

如何让tail -f在不自毁的情况下持续显示日志?

EN

回答 4

Stack Overflow用户

发布于 2014-04-10 20:48:30

我要做的第一件事是尝试--跟随而不是-f。您的问题可能是因为您的日志文件正被轮换出。从手册页:

使用--

(-f),tail默认跟在文件描述符之后,这意味着即使重命名了结尾的文件,tail也会继续跟踪它的结尾。当您确实想要跟踪文件的实际名称,而不是文件描述符(例如,日志循环)时,这种默认行为是不可取的。在这种情况下使用--follow=name。这会导致tail以适合重命名、删除和创建的方式跟踪指定的文件。*

票数 4
EN

Stack Overflow用户

发布于 2014-04-10 20:51:22

tail -f不应该被杀。

顺便说一句,尾巴不会自杀,它是被什么东西杀死的。例如,系统内存不足或资源限制过于严格。

请找出是什么扼杀了你的尾巴,例如使用gdbstrace。还要检查您的环境,至少要检查ulimit -admesg是否有任何线索。

票数 2
EN

Stack Overflow用户

发布于 2014-04-10 22:23:53

如果您的描述是正确的,并且tail实际显示

代码语言:javascript
复制
Killed

则可能不会因为日志轮换而发生这种情况。日志轮换会导致tail停止显示新行,但即使文件被删除,tail也不会被终止。

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

SIGKILL在另一个终端上的用户发出命令,如kill -9 1234pkill -9 tail

  • Some,其他工具或守护进程(尽管我想不出有任何工具或守护进程会这样做)

  • ,内核本身可以向您的进程发送SIGKILL。在一种情况下,它会这样做,如果OOM (内存不足)杀手启动。当系统中的所有内存和交换空间都被使用时,就会发生这种情况。内核将选择一个正在使用大量内存的进程并将其杀死。如果发生这种情况,它将在syslog中可见,但它不太可能使用那么多内存。

  • 如果超过RLIMIT_CPU (您的进程已使用的CPU时间量的限制),内核可能会向您发送SIGKILL。如果让tail运行足够长的时间,并且设置了ulimit,那么就会发生这种情况。要检查这一点(以及其他资源限制),请使用ulimit -a

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22988430

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档