我正在使用 shell 脚本来触发一个curl 请求,该请求会删除我的Elasticsearch 集群中某种类型的所有文档。如果成功,Logstash 将启动并尝试重新索引已删除类型的文档。
printf "\n%s\n" "Sending delete request..."
RESPONSE=$(curl --max-time 600 -XPOST
"https://mycluster.com:9243/locations/ca/_delete_by_query?conflicts=proceed" -H
'Content-Type: application/json' -d' { "query": { "match_all": {} } }'
--user user:password)
if [[ $RESPONSE == *"deleted"* ]]; then
echo $RESPONSE
printf "\n%s\n" "Delete successful, starting Logstash..."
cd /home/denroot/EP-logstash && bin/logstash -f /home/denroot/EP-
logstash-configs/locations/create/california.config
else
echo $RESPONSE
printf "\n%s\n" "Delete failed, shutting down..."
fi
我遇到的问题是这种特定类型有超过 500 万个文档。 Elasticsearch 删除任务无法在 5 分钟过去之前完成,并且我的 curl 请求以退出代码 0 退出。我似乎无法使用 --max-time 来阻止这种情况发生。通常,当 Elasticsearch 中的删除任务完成时,它会发回一个 JSON 响应正文,我需要该正文才能使控制流逻辑正常工作。任何防止这个 5 分钟退出问题的帮助将不胜感激,因为我似乎找不到先例。
答案1
您的脚本应在 10 分钟后退出。
尝试增加(或删除)最大时间以解除该限制
如果服务器端规定了 5 分钟的超时时间,您可以尝试多次运行 curl 命令,直到收到预期的输出/退出代码。