如果 curl 命令的时间超过 1 秒,则发送警报电子邮件

如果 curl 命令的时间超过 1 秒,则发送警报电子邮件

我正在尝试编写一个代码,当 curl 命令所花费的时间超过 1 秒时发送一封警报电子邮件。

if time curl {URI} > 1; then mailx -r [email protected] -s ALERT; fi

自从时间命令返回的不仅仅是一个数字值,这会失败。

关于如何实现这一目标,有什么想法吗?

答案1

我会保存该进程的 PID curlsleep然后测试它是否仍在运行kill

curl … &
pid=$!
sleep 1
if kill -0 $pid &>/dev/null; then
  mailx -r [email protected] -s ALERT
fi

sleep 1您可以使用或分别轻松地进行测试sleep 2

$ sleep 1 & pid=$!; sleep 1; if kill -0 $pid &>/dev/null; then echo running; fi
[1] 27520
[1]+  Done                    sleep 1
$ sleep 2 & pid=$!; sleep 1; if kill -0 $pid &>/dev/null; then echo running; fi
[1] 27599
running

答案2

从表面上看,卷曲似乎无所谓。

所以我建议如果命令持续时间超过一秒,则使用暂停。 这里是单行

timeout 1s curl {URI} || mailx -r [email protected] -s ALERT

如果超时,它将返回错误并运行 mailx 命令。

未经测试但应该可行。

答案3

Curl 有一个选项,即 --max-time(如果您想控制会话连接阶段所花的时间,还有 --connect-time)。如果发生超时,curl 将返回错误代码 28。

像这样:

curl --max-time 60 <URL>
if [ $? -eq 28 ]
then 
  mailx -r [email protected] -s ALERT
fi

应该这么做。

我找到了这个网站一切卷曲描述了 Curl 的功能。

相关内容