我已经建立了一个Xenserver举办Debian 虚拟机和Zenoss 核心 4.2.4。Xenserver 有一个西门子 T35 GSM 调制解调器连接到其串行端口 COM1。我使用ser2net+ 一些 Xenserver 配置以使其工作。(COM1 绑定、SELinux 等)我创建了一个可以轻松发送短信的 shell 脚本。
我创建了一个触发器+通知,除了消息是空的之外,一切都运行正常!!!
脚本如下:
#!/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 发送测试消息,它也会到达,但没有文本......
感谢您的时间!
答案1
问题似乎是,据我所知,Zenoss 将实际消息发送到脚本的 STDIN 输入,但您的脚本将其作为命令行参数。您必须修改您的期望脚本,使其从 STDIN 而不是读取消息。$argv 3
之后,您的测试脚本应该像这样工作:
echo "Message" | ./sms.sh 10.10.0.52 3333 +32486000000
我真的不知道期望是什么,所以我无法帮助解决实际的脚本。
答案2
它正在发挥作用,
我查看了/usr/local/zenoss/Products/ZenUtils/Utils.py
文件,发现 Zenoss 发送了消息文本所以stdin
我只需要读取期望脚本中的 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
希望这对任何人都有帮助!
答案3
expect ">"
?这是某种复制粘贴错误吗?或者实际上应该是这样expect ">"
?