Asterisk電話システムを備えたFreePBXで使用するスクリプトがあります。拡張プログラム/エンドポイント中にオフライン/使用できないものがあるかどうかを知りたいです。その情報を電子メールで送信したいと思います。
#!/bin/bash
email="[email protected]"
offlineExtensions=$(asterisk -rx 'pjsip show contacts' | grep -i "unavail")
if [ "$offlineExtensions" ]
then
echo $offlineExtensions | mail -s "Extensions Offline" $email
fi
私のメールは次のとおりです。
Contact: 7101/sip:7101@IP_ADDRESS:5060 d20a378e88 Unavail 55.829 Contact: 7770/sip:7770@IP_ADDRESS:5060 174a796f10 Unavail 12.275
連絡先情報を互いにリンクせずに別の行に表示したいと思います。スクリプトで次の行記号(\ n)を使用しましたが、うまくいかないようです。
どんなアイデアがありますか?
答え1
$offlineExtensions
で参照されていないため、連絡先がリンクされましたecho $offlineExtensions | ...
。変数の改行文字はそのまま残りますが、シェルは変数を単語に分割し、スペースで区切られた単語を連結します。これを防ぐには、$offlineExtensions
二重引用符で囲む必要があります。同様に、引用するのも衛生に良いです$email
(たとえこの特別な場合には引用しないことは無害ではありますが)。
スクリプトに隠されている関連のない問題は、echo
印刷内容が不明な変数を使用していることです。$offlineExtensions
ダッシュで始まる場合は、ダッシュ-
をecho
オプションとして作成してください。の一部の実装では using の代わりに を使用して問題を回避できますが、echo
他の実装ではそうではありません。これを処理するポータブル方法は代わりに使用することです。echo --
echo
printf
echo
要約すると、echo ...
この行を次のように置き換えます。
printf '%s\n' "$offlineExtensions" | mail -s 'Extensions Offline' "$email"
答え2
お試しください
pjsip show contact concise
しかし、これはとにかく最善の選択ではありません。
最善の方法は/var/log/asterisk/messagesまたはファイル全体を解析することです(誰かがアクセスできないか接続できない場合はログに設定できます)。
最善の方法は、自分で書くよりも、nagiosや他の監視ソフトウェアを使用することです。
答え3
私の最終的なスクリプトが動作します。ありがとうございます。
#!/bin/bash
email="[email protected]"
offlineExtensions=$(asterisk -rx 'pjsip show contacts' | grep -i "unavail")
if [ "$offlineExtensions" ]
then
printf "$offlineExtensions" | mail -s 'Extensions Offline' "$email"
fi