BASH - 如果发送 curl post 请求服务器 returns 出现意外结果,如何在继续执行之前强制休眠 300 秒
BASH - how to force sleep of 300s before continuing the execution, if upon sending a curl post request the server returns an unexpected result
@Socowi 指导我完美解决,你可以在问题的底部看到它:
(1)
这是一个实际的脚本示例,其内容包含 10 个 curl POST 请求,每个请求都会在我的网站上发布不同的评论。
#!/bin/bash
curl "https://mywebsite.com/comment... ...&text=Test-1"; sleep 60;
curl "https://mywebsite.com/comment... ...&text=Test-2"; sleep 60;
curl "https://mywebsite.com/comment... ...&text=Test-3"; sleep 60;
curl "https://mywebsite.com/comment... ...&text=Test-4"; sleep 60;
curl "https://mywebsite.com/comment... ...&text=Test-5"; sleep 60;
curl "https://mywebsite.com/comment... ...&text=Test-6"; sleep 60;
curl "https://mywebsite.com/comment... ...&text=Test-7"; sleep 60;
curl "https://mywebsite.com/comment... ...&text=Test-8"; sleep 60;
curl "https://mywebsite.com/comment... ...&text=Test-9"; sleep 60;
curl "https://mywebsite.com/comment... ...&text=Test-10"; sleep 60;
(2)
当一切顺利时,终端如下所示:
(3)
问题: 在随机的时间间隔内会出现问题,而不是上面屏幕截图中显示的内容,我将开始收到大量包含“出现问题的文本错误”。例如,它可以很好地执行前 6 个 curl 命令,而在第 7 个将出现错误响应......脚本继续执行,并运行第 8 个 curl 命令并在终端中显示相同的错误, 脚本一直持续到最后让我完成了部分工作。
(4)
所需的解决方案: 我只希望脚本在终端中抛出类似错误时 pause/wait 300 秒,然后再继续 运行 下一个卷曲脚本中的行命令。等待确实有帮助,但我现在必须手动完成。请帮助我解决如何正确修改我的脚本以实现相同的目的。
谢谢!
编辑:我的问题的解决方案,感谢@Socowi:
#!/bin/bash
for i in {1..10}; do
if curl "https://mywebsite.com/comment... ...&text=Test-$i" | grep -qF '"status":"ERROR"'; then
sleep 300 # there was an error
else
sleep 60 # no error given
fi
done
exec $SHELL
通常您可以使用if curl ...
来检查退出状态并相应地调整休眠时间。但是,在您的情况下 curl
成功获得回复。 curl
不关心回复的内容,但是你可以自己查看内容。在您的情况下,json 的工具将是解析响应的正确方法,但 hacky grep
也可以完成这项工作。
因为你想打印响应到终端,我们使用一个变量,这样我们就可以打印响应 和 使用 grep
就可以了。
#!/bin/bash
for i in {1..10}; do
response=$(curl "https://...&text=Test-$i")
echo "$response"
if grep -qF '"status":"ERROR"' <<< "$response"; then
sleep 300 # there was an error
else
sleep 60 # everything ok
fi
done
@Socowi 指导我完美解决,你可以在问题的底部看到它:
(1) 这是一个实际的脚本示例,其内容包含 10 个 curl POST 请求,每个请求都会在我的网站上发布不同的评论。
#!/bin/bash
curl "https://mywebsite.com/comment... ...&text=Test-1"; sleep 60;
curl "https://mywebsite.com/comment... ...&text=Test-2"; sleep 60;
curl "https://mywebsite.com/comment... ...&text=Test-3"; sleep 60;
curl "https://mywebsite.com/comment... ...&text=Test-4"; sleep 60;
curl "https://mywebsite.com/comment... ...&text=Test-5"; sleep 60;
curl "https://mywebsite.com/comment... ...&text=Test-6"; sleep 60;
curl "https://mywebsite.com/comment... ...&text=Test-7"; sleep 60;
curl "https://mywebsite.com/comment... ...&text=Test-8"; sleep 60;
curl "https://mywebsite.com/comment... ...&text=Test-9"; sleep 60;
curl "https://mywebsite.com/comment... ...&text=Test-10"; sleep 60;
(2) 当一切顺利时,终端如下所示:
(3) 问题: 在随机的时间间隔内会出现问题,而不是上面屏幕截图中显示的内容,我将开始收到大量包含“出现问题的文本错误”。例如,它可以很好地执行前 6 个 curl 命令,而在第 7 个将出现错误响应......脚本继续执行,并运行第 8 个 curl 命令并在终端中显示相同的错误, 脚本一直持续到最后让我完成了部分工作。
(4) 所需的解决方案: 我只希望脚本在终端中抛出类似错误时 pause/wait 300 秒,然后再继续 运行 下一个卷曲脚本中的行命令。等待确实有帮助,但我现在必须手动完成。请帮助我解决如何正确修改我的脚本以实现相同的目的。
谢谢!
编辑:我的问题的解决方案,感谢@Socowi:
#!/bin/bash
for i in {1..10}; do
if curl "https://mywebsite.com/comment... ...&text=Test-$i" | grep -qF '"status":"ERROR"'; then
sleep 300 # there was an error
else
sleep 60 # no error given
fi
done
exec $SHELL
通常您可以使用if curl ...
来检查退出状态并相应地调整休眠时间。但是,在您的情况下 curl
成功获得回复。 curl
不关心回复的内容,但是你可以自己查看内容。在您的情况下,json 的工具将是解析响应的正确方法,但 hacky grep
也可以完成这项工作。
因为你想打印响应到终端,我们使用一个变量,这样我们就可以打印响应 和 使用 grep
就可以了。
#!/bin/bash
for i in {1..10}; do
response=$(curl "https://...&text=Test-$i")
echo "$response"
if grep -qF '"status":"ERROR"' <<< "$response"; then
sleep 300 # there was an error
else
sleep 60 # everything ok
fi
done