我已经搭build了一个Xenserver来托pipe带有Zenoss Core 4.2.4的Debian VM 。 Xenserver的串行端口COM1上连接有西门子T35 GSM调制解调器 。 我使用ser2net +一些Xenserverconfiguration来使它工作。 (COM1绑定,SELinux,…)我创build了一个可以轻松发送短信的shell脚本。
我创build了一个触发器+通知,一切正常,除了消息是空的!
这是脚本:
#!/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页面命令:
$ZENHOME/bin/sms.sh 10.10.0.52 3333 $RECIPIENT
这在Linux中的作用如下:
./sms.sh 10.10.0.52 3333 +32486000000 message
我只是无法从短信中得到来自Zenoss的消息….我需要完成这最后一步才能完全正常工作!
如果我尝试从Zenoss发送testing消息,它也到达,但没有文本…
感谢您的时间!
问题似乎是,从我的理解Zenoss发送实际的消息到脚本STDINinput,但您的脚本期望它作为命令行参数。 你必须修改你期望的脚本,它会从STDIN而不是$argv 3读取消息。 之后,你的testing脚本应该像这样工作:
echo "Message" | ./sms.sh 10.10.0.52 3333 +32486000000
我真的不知道期待,所以我不能帮助实际的脚本。
它工作,
我查看了/usr/local/zenoss/Products/ZenUtils/Utils.py文件,发现Zenoss将消息文本发送到stdin所以我只需要在expect脚本中读取stdin来获取消息。
这里是新的工作脚本:(注意,我省略了主机和端口参数)
#!/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
希望这会帮助任何人!
expect ">" ? 这是一种复制粘贴错误或实际上应该expect ">" ?