Shell命令检索curl的输出不起作用

xnifntxz  于 12个月前  发布在  Shell
关注(0)|答案(2)|浏览(153)

我试图通过Kubernetes livenessProbe执行此命令,但我认为它没有按预期工作,因为我在pod事件日志中看到探测失败。这是命令:

sh -c reply=$(curl -s -o /dev/null -w %{http_code} http://127.0.0.1:8080/login); if [ "$reply" -lt 200 -o "$reply" -ge 400 ]; then exit 1; fi;

当我exec到容器中并运行此命令时,我得到以下错误:

/bin/sh: 1: [: Illegal number:

我回显$reply,在运行上述命令后,没有任何内容存储在reply变量中。当我运行不带'sh -c'部分的命令时,它工作正常,变量reply被填充。不知何故,sh命令无法读取curl命令的输出.我试图删除curl请求的-o /dev/null部分,但这没有帮助。
如何让这个命令执行?

mmvthczy

mmvthczy1#

要使用多个同步命令运行sh -c,需要将它们括在引号("')内,并在命令内使用的任何类似引号之前和变量的美元符号$之前添加反斜杠

sh -c "export reply=$(curl -s -o /dev/null -w %{http_code} http://127.0.0.1:8080/login); if [ \"\$reply\" -lt 200 -o \"\$reply\" -ge 400 ]; then exit 1; fi;"
rt4zxlrg

rt4zxlrg2#

沿着@tax evader的回答,我通过将以下内容放入部署规范中来使探测器工作:

livenessProbe:
  exec:
    command: ["sh", "-c", 'export reply=$(curl -s -o /dev/null -w %{http_code} http://127.0.0.1:8080/login); if [ \"\$reply\" -lt 200 -o \"\$reply\" -ge 400 ]; then exit 1; fi;'

相关问题