Debian VMをホストするXenserverをZenoss Core 4.2.4。 Xenserverには、シリアルポートCOM1に接続されたSiemens T35 GSMモデムがあります。 ser2net+いくつかのXenserver構成を使用して動作させました。 (COM1バインディング、SELinux、...)SMSメッセージを簡単に送信できるシェルスクリプトを作成しました。
トリガーと通知を作成しましたが、メッセージが空であることを除いて、すべてが完全に機能します!!!
スクリプトは次のとおりです。
#!/usr/bin/expect
# - VAR
set ctrlz \032
set xt \135
set timeout 15
set Host [lindex $argv 0]
set port [lindex $argv 1]
set number [lindex $argv 2]
set message [lindex $argv 3]
# - LOG
log_file -a sms.log;
send_log "$Host $port $number:$message"
# - CONNECT
spawn telnet $Host $port
sleep 1
# - SEND
send AT+CMGF=1\r;
expect "OK"
send AT+CMGS="$number"\r;
expect ">"
send "$message$ctrlz";
expect "OK"
# - END
そして、これがZenoss PageCommandです。
$ZENHOME/bin/sms.sh 10.10.0.52 3333 $RECIPIENT
これはLinuxで次のように機能します。
./sms.sh 10.10.0.52 3333 +32486000000 message
SMSメッセージ....でZenossからメッセージを取得できません。完全に機能させるには、この最後の手順を完了する必要があります。
Zenossからテストメッセージを送信しようとすると、メッセージも届きますが、テキストはありません...
お時間をいただきありがとうございます!
それは働いています、
/usr/local/zenoss/Products/ZenUtils/Utils.py
ファイルを調べたところ、Zenossがメッセージテキストをstdin
に送信していることがわかりました。そのため、メッセージを取得するには、expectスクリプトでstdinを読み取るだけで済みました。
これがnew作業スクリプトです:(ホストとポートのパラメーターを省略したことに注意してください)
#!/usr/bin/expect
# - VAR
set ctrlz \032
set xt \135
set timeout 15
set number [lindex $argv 0]
set message [gets stdin]
# - LOG
log_file -a sms.log;
send_log "$number:$message"
# - CONNECT
spawn telnet 10.10.0.52 3333
sleep 1
# - SEND
send AT+CMGF=1\r;
expect "OK"
send AT+CMGS="$number"\r;
expect ">"
send "$message$ctrlz";
expect "OK"
# - END
これが誰にでも役立つことを願っています!
問題は、私の理解では、Zenossが実際のメッセージをスクリプトのSTDIN入力に送信することですが、スクリプトはそれをコマンドラインパラメーターとして予期しているようです。 $argv 3
ではなくSTDINからのメッセージを読み取るようにexpectスクリプトを変更する必要があります。その後、テストスクリプトは次のように機能するはずです。
echo "Message" | ./sms.sh 10.10.0.52 3333 +32486000000
私は本当に期待を知らないので、実際のスクリプトを手伝うことはできません。
expect ">"
?それはある種のコピーアンドペーストエラーですか、それとも実際にはexpect ">"
?