我正在尝试编写一个代码,当 curl 命令所花费的时间超过 1 秒时发送一封警报电子邮件。
if time curl {URI} > 1; then mailx -r [email protected] -s ALERT; fi
自从时间命令返回的不仅仅是一个数字值,这会失败。
关于如何实现这一目标,有什么想法吗?
答案1
我会保存该进程的 PID curl
,sleep
然后测试它是否仍在运行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 的功能。