incrond 使用哪些资源?什么可以让它停止?

incrond 使用哪些资源?什么可以让它停止?

Incrontab 设置为监控大约 10 个目录。它所做的唯一一件事就是当其中一个目录中收到新文件时,它会启动一个 Bash 脚本。大约每 5 分钟在每个目录中收到一个文件。但是,incrond 偶尔会停止。没有规则何时会发生这种情况。它从每周几次到每月几次不等。记录的错误是:

incrond[35203]: *** unhandled exception occurred ***
incrond[35203]:   polling failed
incrond[35203]:   error: (11) Resource temporarily unavailable
incrond[35203]: stopping service

我知道我没有发布太多信息。但是,系统是封闭的,所以我分享了我能分享的内容。我不是在寻找直接的答案(因为问题可能太宽泛了)。我在寻找我可以研究的想法。这种行为的原因可能是什么?我应该检查什么?我应该查看哪些资源?

答案1

incrond使用内核级inotify子系统,将inotify基于 C 的接口封装在 C++ 容器中。incrond 源文件,您遇到的错误似乎与incrondC++ 类中封装的文件描述符的轮询失败有关:

int res = 轮询(ed.GetPollData(), ed.GetSize(), -1);

if (res > 0) { ed.ProcessEvents(); } else if (res < 0) { switch (errno) { case EINTR: // syscall interrupted - continue polling break; case EAGAIN: // not enough resources - wait a moment and try again syslog(LOG_WARNING, "polling failed due to resource shortage, retrying later..."); sleep(POLL_EAGAIN_WAIT); break; default: throw InotifyException("polling failed", errno, NULL); } }

很难确定轮询失败的确切原因。最常见的原因可能是:

  • 超负荷的系统
  • incrond某些功能崩溃/段错误

无论如何,你监控的目录下有多少个文件?

答案2

使用strace命令,记录到文件,并根据您注意到故障发生的频率设置日志文件进行轮换。

例如,如果您花了一周的时间才发现它失败了,那么您的日志轮换必须保留 7 天(或更长时间)。如果您通常在一小时内意识到,那么每小时轮换 6 到 10 小时的日志就足够了。

更多相关信息和示例:http://www.thegeekstuff.com/2011/11/strace-examples

相关内容