redhat7オペレーティングシステムでNagios check_procsモジュールを実行すると、次のエラーが発生します。 Googleで検索すると、procpsパッケージを再インストールする必要があることがわかりました。また、procpsパッケージを再インストールしましたが、最初の試みでモジュールが正しく機能して失敗しました。
Error: System call sent warnings to stderr: error: unsupported option (BSD syntax)
答え1
Error: System call sent warnings to stderr: error: unsupported option (BSD syntax)
check_procs
問題は、プラグインとオペレーティングシステムのコマンドが一致しないことですps
。
プロセスを検査するためのコマンドをcheck_procs
生成するNagiosプラグインは、コマンド出力に-style形式の文字列を適用して、実行中のプロセスについて知っておくべきことを見つけます。オペレーティングシステムごとにコマンドが大きく異なるため、各オペレーティングシステムのコマンドに合わせて調整する必要があります。ps
scanf()
ps
ps
check_procs
これは、プラグインがソースコードからバイナリにコンパイルされたときに行われます。既知のすべてのps
パラメータとオプションの組み合わせを順番にチェックし、そのうちの1つが有効になるまでフォーマット文字列を検索する400行以上の設定スクリプトがあります。その後、この組み合わせはコンパイルされたプラグインに組み込まれます。
実行中の物理システムの組み合わせが間違っていると、check_procs
誤ったps
形式の出力が生成されます(証明MacPortsのバグ #28801そしてモニタリングプラグインの問題 #1328)または標準エラーのエラーメッセージを生成します(証人Debian のバグ #296003) はプラグインによって選択され警告されます。後者はここで起こるものです。
これにより、次のようないくつかの結果が発生します。
ps
ソースからプラグインをビルドする場合は、最終プロダクションシステムにインストールするのと同じコマンドを使用してプラグインをビルドする必要があります。ps
事前にビルドされたバイナリを使用している場合は、そのコマンドがプラグインを実行しているシステムのコマンドと一致するシステムにバイナリをビルドする必要があります。バイナリを直接ビルドしていない場合は、ビルダーに連絡する必要があり、事前にビルドされたパッケージバイナリを使用している場合は、少なくともパッケージマネージャに連絡する必要があります。
答え2
一般的な検査プロセスのスクリプトを書いて解決しました。エラー:システムコールはstderrに警告を送信します。エラー:サポートされていないオプション(BSD構文)質問。
以下のスクリプトを見つけてください。
#!/bin/bash
#
# Script to check Process usage on Linux. Ignores Process used by disk cache.
#
# Requires the bc command
# $1 $2 $3 $4
# ./check_Process -w 85 -c 95
print_help() {
echo "Usage:"
echo "[-w] Warning level as a percentage"
echo "[-c] Critical level as a percentage"
exit 0
}
while test -n "$1"; do
case "$1" in
--help|-h)
print_help
exit 0
;;
-w)
warn_level=$2
shift
;;
-c)
critical_level=$2
shift
;;
*)
echo "Unknown Argument: $1"
print_help
exit 3
;;
esac
shift
done
if [ "$warn_level" == "" ]; then
echo "No Warning Level Specified"
print_help
exit 3;
fi
if [ "$critical_level" == "" ]; then
echo "No Critical Level Specified"
print_help
exit 3;
fi
count=`ps -ef | wc -l`
###################
if [ "$count" -lt "$warn_level" ]; then
echo "Process OK:$count | 'Process' =$count;$warn_level;$critical_level"
exit 0;
elif [ "$count" -ge "$warn_level" ] && [ "$count" -le "$critical_level" ]; then
echo "Process WARNING: $count | 'Process'=$count;$warn_level;$critical_level"
exit 1;
elif [ "$count" -gt "$critical_level" ]; then
echo "Process CRITICAL: $count | 'Process'=$count;$warn_level;$critical_level"
exit 2;
fi