私はUbuntu14.04を使用していて、実行しようとしています
_/usr/lib/nagios/plugins/check_procs -C rsyslogd -w 1:3 -c 1:5 -s S
_
そしてそれは戻ります
_PROCS CRITICAL: 0 processes with command name 'rsyslogd', STATE = S | procs=0;1:3;1:5;0;
_
したがって、_-vvv
_で実行すると、_check_procs
_がコマンド_/bin/ps axwwo 'stat uid pid ppid vsz rss pcpu etime comm args'
_を使用してプロセスを一覧表示していることがわかります。 rsyslogdプロセスが見つかり、次のようにリストされています。
_Ssl 101 406 1 256232 25392 0.0 157-05:57:14 rsyslogd rsyslogdproc#=0 uid=101 vsz=256232 rss=25392 pid=406 ppid=1 pcpu=0.00 stat=Ssl etime=157-05:57:14 prog=rsyslogd args=rsyslogd
_
コマンドのヘルプを見ると、次のようになっています。
-s, --state=STATUSFLAGS Only scan for processes that have, in the output of `ps`, one or more of the status flags you specify (for example R, Z, S, RS, RSZDT, plus others based on the output of your 'ps' command).
だからそれは本当に機能しているはずです。テストのためだけに実行しようとしました
_/usr/lib/nagios/plugins/check_procs -C rsyslogd -w 1:3 -c 1:5 -s Ssl
_
このコマンドは、最初のコマンドから期待する結果を返します。
_PROCS OK: 1 process with command name 'rsyslogd', STATE = Ssl | procs=1;1:3;1:5;0;
_
check_procsはv1.5です。
同じテストコマンドがRHEL6.5サーバーで機能しているので、Ubuntu固有の可能性があります。
Check_procsのソースを見ると、表示されている動作は仕様によるものです。むしろ、動作はps
実装の動作に完全に依存します。 (それがRHELシステムで機能する場合、それはほぼ間違いなく幸せな偶然です。)
プラグインは、/ procのないシステム(Linux以外など)で実行できるように、(/ procを掘り下げる代わりに)ps
を使用する必要があります。
ps
出力をスクレイピングした後、プラグインはstrstr
を呼び出して、プロセス状態が-sへのコマンドライン引数に含まれているかどうかを確認します。したがって、あなたの例では、「Ssl」が「S」の部分文字列であるかどうかを確認しています。
これは逆論理のように見えるかもしれません。たとえば、引数「S」が「Ssl」の部分文字列であるかどうかをチェックする必要がありますが、-sへの引数として複数のプロセス状態を提供することが目的であると思います。
たとえば、次のことができます。
check_procs -C rsyslogd -w 1:3 -c 1:5 -s S,Ssl,Sl
PROCS OK: 1 process with command name 'rsyslogd', STATE = S,Ssl,Sl
カンマは読みやすくするためのものです。プラグインは事実上それらを無視します。