Incrontabは、約を監視するように設定されています。 10ディレクトリ。唯一のことは、これらのディレクトリの1つで新しいファイルが受信されたときにBashスクリプトを開始することです。各dirで、約5分ごとに1つのファイルが受信されます。ただし、incrondが停止することがあります。それがいつ起こるかという規則はありません。それは週に数回から月に数回まで変化します。ログに記録されるエラーは次のとおりです。
incrond[35203]: *** unhandled exception occurred ***
incrond[35203]: polling failed
incrond[35203]: error: (11) Resource temporarily unavailable
incrond[35203]: stopping service
私は多くの情報を投稿していないことを知っています。しかし、システムは閉鎖されているので、私はできることを共有しました。私は直接の答えを探していません(質問が広すぎるかもしれないので)。研究できるアイデアを探しています。そのような行動の理由は何でしょうか?何を確認すればよいですか?どのリソースを確認する必要がありますか?
incrond
はカーネルレベルのinotify
サブシステムを使用し、inotify
CベースのインターフェイスをC++コンテナにカプセル化します。 incrond source files を見ると、直面しているエラーは、incrond
C++クラスにカプセル化されたファイル記述子のポーリングの失敗に関連しているようです。
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
関数のクラッシュ/セグメンテーション違反とにかく、監視対象のディレクトリの下にはいくつのファイルがありますか?
コマンドでstrace
を使用してファイルにログを記録し、障害の発生に気付いた頻度に応じてログファイルをローテーションするように設定します。
たとえば、失敗したことがわかるまでに1週間かかる場合は、ログローテーションを7日(またはそれ以上)保持する必要があります。一般的に1時間以内に認識している場合は、6〜10時間のローテーションされた1時間ごとのログで十分です。
それと例の詳細: http://www.thegeekstuff.com/2011/11/strace-examples