我创建了一个脚本来监视并进行如下查询:-
httpUrl="http://some.website.ashx"
balExp=$(curl -v -X POST -d "UID=test&PWD=2222" $httpUrl)
如果查询未返回任何内容或超时,如何发送电子邮件警报(例如我的电子邮件)?
更新:
我修改了脚本来运行查询
if [ $balExp -eq 0 ]
echo "Success"
else
echo "failed"
fi
我总是失败,但curl
命令返回成功(0)。
答案1
失败的 HTTP 请求的 Curl 退出代码
通常,如果请求的 HTTP 资源不可用,Web 服务器会使用与相关 HTTP 状态代码(例如 404)相对应的 HTML 文档进行响应。在这种情况下,curl 会从服务器接受此文档,因为它已成功获取响应从 Web 服务器,它显示错误文档并以状态 0 退出表示成功。
curl
如果检索 HTTP 资源时出现问题,您希望返回错误代码。为此,您需要提供-f, --fail
卷曲选项。来自curl手册页:
服务器出现错误时静默失败(根本没有输出)。这样做主要是为了更好地启用脚本等来更好地处理失败的尝试。在正常情况下,当 HTTP 服务器无法传递文档时,它会返回一个 HTML 文档来说明情况(通常还描述了原因及更多信息)。该标志将阻止curl 输出该内容并返回错误22。
此方法不是自动防故障的,有时会漏掉不成功的响应代码,特别是在涉及身份验证时(响应代码 401 和 407)。
笔记:以上(大部分)是从我的回答中复制的你关于curl的类似问题。
发送邮件
您可以使用该mail
程序发送电子邮件。在基于 Debian 的系统上,它可以通过软件包安装,mailutils
而在基于 Red Hat 的发行版上,它由软件包提供mailx
。
echo "Body of email" | mail [email protected] -s "Subject line"
如果您已经使用命令行邮件客户端,例如mutt
可以使用:
echo "Body of email" | mutt [email protected] -s "Subject line"
测试命令是否成功
测试命令的输出时,不需要使用test
或[
。您可以简单地使用命令的输出,如以下脚本(包含上述所有内容):
httpUrl="http://some.website.ashx"
if balExp=$(curl -f -v -X POST -d "UID=test&PWD=2222" "$httpUrl"); then
echo "$balExp" | mail [email protected] -s "Successful download of $httpUrl"
else
echo "$balExp" | mail [email protected] -s "Problem downloading $httpUrl"
fi
请注意,我使用双引号引用了 shell 变量,$httpUrl
以便脚本可以与其他可能包含 shell 解释的字符(&
常见字符)的 URL 一起使用。
最后,if
您问题中的陈述缺少相应的then
.