我试图在我的部署中编写一些bash命令。yaml文件。我想在postStart执行这个命令。
如何检查命令是否正常运行?如果可能的话,如何获取节点的IP地址?
lifecycle:
postStart:
exec:
command:
- "sh"
- "-c"
- |
GATEWAY_HTTPS_NAME="${GATEWAY_SERVICE_NAME}_SERVICE_PORT_HTTPS"
GATEWAY_HTTPS_PORT=$(eval "echo $$GATEWAY_HTTPS_NAME")
cat /app/gateway/ip
BOOL=true
while [ $BOOL ]; do
if [ "$GATEWAY_HTTPS_PORT" != '' ]; then
nohup sh -c "sleep 30; cat /app/gateway/ip | xargs -I[] curl -H 'Content-Type: application/json' -d '{}' -k https://[]/actuator/refresh" &
ROUTES=$(nohup sh -c "cat /app/gateway/ip | xargs -I[] curl -H 'Content-Type: application/json' -d '{}' -k https://[]/actuator/gateway/routes")
else
nohup sh -c "sleep 30; cat /app/gateway/ip | xargs -I[] curl -H 'Content-Type: application/json' -d '{}' -k http://[]/actuator/refresh" &
ROUTES=$(nohup sh -c "cat /app/gateway/ip | xargs -I[] curl -H 'Content-Type: application/json' -d '{}' -k http://[]/actuator/gateway/routes")
fi
NODE_IP=???
echo $ROUTES
if [ $ROUTES[*] =~ $NODE_IP ]; then
BOOL=$false
fi
BOOL=$false
sleep 10
done
您可以使用退出状态验证命令,我通常通过添加双管道来实现,如果出现问题,该管道将输出退出状态,下面是一个示例:
ls /unexistant/dir &>/dev/null && echo Success, Code=$? || echo Something went wrong, Code=$?
这显然会抛出一个错误并在双管道后运行命令,因为状态码not equals 0
将返回出错了,代码=2
相反,如果我们运行:
ls /existant/dir &>/dev/null && echo Success, Code=$? || echo Something went wrong, Code=$?
这将运行第一个命令success和退出状态将是0,这意味着成功,这是输出:success, Code=0
你当然可以摆弄一下这个,阅读更多关于双管
的内容