我正在尝试监控我们的 voip sip 中继运营商,如果它不可用,我会从下面的脚本收到一封电子邮件,脚本中的命令运行正常,在 /tmp/checkpeers 中创建日志文件,但脚本没有发送电子邮件,我尝试了很多选项,因为它们可以在下面的脚本中看到,我还测试了邮件传递代理是否启用,并且我已经使用 email -s“test”发送了一些测试电子邮件[电子邮件保护]它有效,有人可以帮忙吗?
#!/bin/sh
# Check for Offline SIP Peers
#peername=vitel-inbound2/kdc_gatine
rm -f /tmp/checkPeers
#/usr/sbin/asterisk -rx 'sip show peers' | grep UNKNOWN >/tmp/checkPeers
#asterisk -rx "sip show peers" | grep vitel-inbound2/kdc_gatine | grep -v OK
asterisk -rx "sip show peers" | grep vitel-inbound2/kdc_gatine | grep -v OK >/tmp/checkpeers
if [ -s "/tmp/checkPeers" ]; then
mail -s "Vitelity Inbound SIP Connection OffLine please Check" [email protected] < /tmp/checkpeers
#[EMAIL="[email protected]"][email protected][/EMAIL] </tmp/checkpeers
#SUBJECT="Vitelity Inbound SIP Connection OffLine please Check"
#EMAILID="[email protected]" </tmp/checkPeers
#$SUBJECT
#$EMAILID
fi
答案1
我猜你创建的文件与你测试的文件不匹配。这些就是我指的行。
asterisk -rx "sip show peers" | grep vitel-inbound2/kdc_gatine | grep -v OK >/tmp/checkpeers
if [ -s "/tmp/checkPeers" ]; then
在第一个例子中,您将文件创建为/tmp/checkpeers
,但在第二个例子中,您将针对 进行测试。注意到小写和大写/tmp/checkPeers
的区别了吗?由于 Linux 中的文件区分大小写,因此它们必须相同。确保此处和脚本中其他地方的文件名匹配。p
P
祝你好运。
答案2
根据 @virtex 的观察,我会完全避免使用临时文件
data=$(asterisk -rx "sip show peers" | grep vitel-inbound2/kdc_gatine | grep -v OK)
if [ -n "$data" ]; then
subject="Vitelity Inbound SIP Connection OffLine please Check"
recipients="[email protected]"
echo "$data" | mail -s "$subject" "$recipients"
fi
如果您对临时文件没有异议,那么请 DRY 并使用变量来保存文件名:
tmp=$(mktemp -t checkPeers.XXXX)
trap "rm -f $tmp" EXIT # remove when script exits
asterisk -rx "sip show peers" | grep vitel-inbound2/kdc_gatine | grep -v OK >"$tmp"
if [ -s "$tmp" ]; then
mail -s "Vitelity Inbound SIP Connection OffLine please Check" [email protected] <"$tmp"
fi