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

Incrontab设置为监视约。 10个目录。 它所做的唯一的事情就是在这些目录之一中接收到新文件时,它启动一个Bash脚本。 大约每5分钟收到一个文件,每个文件夹里都有一个文件。 然而,incrond偶尔停止。 什么时候会发生,没有规则。 从每周几次到每月几次不等。 logging的错误是:

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

我知道我没有发布很多信息。 然而,这个系统是closures的,所以我分享了我所能做的。 我不是在寻找直接的答案(因为这个问题可能太广泛了)。 我正在寻找我可能研究的想法。 什么可能是这种行为的原因? 我应该检查什么东西? 我应该检查哪些资源

incrond使用内核级的inotify子系统,在C ++容器中封装基于C的接口。 看看incrond源文件 ,看来你正面临的错误是相关的incrond C ++类中incrond文件描述符上的一个失败的轮询:

 int res = poll(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函数的crash / segfault

无论如何,您的受监控目录下有多less个文件?

在命令上使用strace ,logging到一个文件,并设置日志文件的旋转取决于你发现失败的频率。

例如,如果您花了一周的时间才发现其失败,那么您的日志轮换必须保留7天(或更多)。 如果你一般在一个小时内就知道了,那么每小时旋转6到10个小时就足够了。

更多关于它和例子: http : //www.thegeekstuff.com/2011/11/strace-examples