电子邮件无法使用 Bash 脚本

电子邮件无法使用 Bash 脚本

我正在尝试监控我们的 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 中的文件区分大小写,因此它们必须相同。确保此处和脚本中其他地方的文件名匹配。pP

祝你好运。

答案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

相关内容