checkmk MRPEプラグインを使用して監督のカスタム監視を設定しようとしています。チェック(bashシェルスクリプト)はシェルの内部ではうまく機能しますが、外部Telnetでは出力を取得できません。
問題は、管理者パスワードの割り当てに関連するユーザーエイリアスのようですが、機能しません。したがって、出力が正しくありません。
シェルスクリプトと/ etc / profileにエイリアスを追加しましたが、checkmkエージェントはまだそれを正しく呼び出しません。
私が何を見逃しているのか知っていますか?
#!/bin/bash
shopt -s expand_aliases
alias hammer='hammer -u admin -p XXXXXXXXXXX'
STATE_OK=0
STATE_CRITICAL=2
STATUS=`hammer capsule content synchronization-status --id 11|grep Status:|grep "Capsule is synchronized"`
RET_VAL=$?
if [ "$RET_VAL" != "0" ]
then
ERR_STATUS=`hammer capsule content synchronization-status --id 11|grep -i status|cut -d ":" -f 3`
echo "$ERR_STATUS needs to be synced."
exit $STATE_CRITICAL
else
echo "Capsule is synchronized."
exit $STATE_OK
fi
答え1
特に、スクリプトではエイリアスを使用しないことをお勧めします。ここで私は次のように書きます:
#!/bin/bash -
typeset -A code=([OK]=0 [WARNING]=1 [CRITICAL]=2 [UNKNOWN]=3)
hammer() {
command hammer -u admin -p XXXXXXXXXXX "$@"
}
result=UNKNOWN
if
status=$(
hammer capsule content synchronization-status --id 11|
grep 'Status:'
)
then
if
[[ $status = *'Capsule is synchronized'* ]]
then
message='Capsule is synchronized.'
result=OK
else
message="$status needs to be synced."
result=CRITICAL
fi
else
message="Can't determine status."
fi
printf '%s\n' "$result - $message"
exit "${code[$result]}"
いずれにせよ、インタプリタスクリプトを起動した/etc/profile
シェルはrc
ファイルを読みません((t)csh1を除く)。スクリプトが呼び出すユーザーと場所に基づいていると想像してください~/.shellrc
。
コマンドラインからパスワードを渡すのは悪い習慣です。これは、システムに関する公開情報(出力に表示されps -f
ログに残ることがある)であるためです。それが何であるかはわかりませんが、hammer
パスフレーズ(環境変数、ファイル記述子、またはconfファイルなど)よりも安全な代替手段を提供する可能性が高く、そうでない場合は設計上破損しています。
¹これが#! /bin/csh -f
Shebang を使う理由です。ただし、少なくともスクリプトには(t)cshをすべて使用しないことをお勧めします。