无法将 watch 与 kubectl 和 xargs 一起使用

unable to use watch with kubectl and xargs

团队,我正在尝试每 5 秒 运行 下面的内容,但没有成功。

watch -n 5 kubectl get pods -n testes-asdf-234-asdf | grep -v Comple | xargs -l1 -- sh -c 'kubectl logs  -n testes-asdf-234-asdf main --tail=15' --

输出:

does nothing

尝试使用引号,但命令执行一团糟,无法产生正确的输出。我的命令在没有手表和引号的情况下完美运行

watch "kubectl get pods --no-headers -n testes-asdf-234-asdf | grep -v Comple | xargs -l1 -- sh -c 'kubectl logs  -n testes-asdf-234-asdf main --tail=15' --"
Every 2.0s: kubectl get pods --no-headers -n testes-asdf-234-asdf | grep -v Comple | xargs -l1 -- sh -c 'kubectl logs  -n testes...  Wed Dec  4 10:10:18 2019

Error from server (NotFound): pods "main" not found
Error from server (NotFound): pods "main" not found
Error from server (NotFound): pods "main" not found
Error from server (NotFound): pods "main" not found
Error from server (NotFound): pods "main" not found

没有 WATCH 运行没问题

└─ $ ▶ kubectl get pods --no-headers -n testes-asdf-234-asdf | grep -v Comple | xargs -l1 -- sh -c 'kubectl logs  -n testes-asdf-234-asdf main --tail=15' --

**** Stack trace ****
/roadrunner/roadrunner: dw::core::Exception::Exception(dwStatus, char const*)+0xa1 [0xcdfc31]
/roadrunner/roadrunner: dw::roadcast::RoadCastServerEngine::checkMessageEnabledStatus(dwRoadCastMessageType, char const*)+0x3a [0x1c0e1ea]
/roadrunner/roadrunner() [0x1bc2f2a]
/roadrunner/roadrunner: dwRoadCastServer_sendImage()+0x72 [0x1bc4302]
/roadrunner/roadrunner: roadrunner::castData(dwImageObject*, char const*, long, long, unsigned long)+0x66 [0xd03726]
/roadrunner/roadrunner: roadrunner::RRMainPipeline::getCameraEventFrames(roadrunner::CameraFrame**, unsigned int&, roadrunner::RRMainPipeline::CameraFrameList&, dwSensorEvent const*)+0x75c [0xb2c91c]
/roadrunner/roadrunner: roadrunner::RRMainPipeline::getCameraFrames(roadrunner::RRMainPipeline::CameraFrameList*&, roadrunner::CameraFrame**, unsigned int&)+0x3b9 [0xb31039]
/roadrunner/roadrunner: roadrunner::RRMainPipeline::cameraThreadLoop()+0x634 [0xb44b64]
/usr/lib/x86_64-linux-gnu/libstdc++.so.6: ()+0xbd8f0 [0x7f8fe0a6f8f0]
/lib/x86_64-linux-gnu/libpthread.so.0: ()+0x76ba [0x7f90050eb6ba]
/lib/x86_64-linux-gnu/libc.so.6: clone()+0x6d [0x7f8fdff9e41d]

除非您将命令放在引号中,否则 bash 会尝试将 watch ... kubectl ... 的输出传递给第一个 grep,但 watch 永远不会退出。

所以试试这个:

watch -n 5 "kubectl get pods -n test | grep -v Comple | xargs -l1 -- sh -c 'kubectl logs $1 -n test main --tail=15' --"

编辑: 没注意到你有一个 </code> 在那里。您需要对 <code>$ 进行转义,因为它现在用双引号引起来,并且只会扩展为空字符串(根据您显示的输出)。

我编辑了上面的命令以反映这一点。