根据curl命令的成功发送电子邮件

根据curl命令的成功发送电子邮件

我创建了一个脚本来监视并进行如下查询:-

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.

相关内容