Openshift远程命令执行(exec)

Openshift remote command execution (exec)

我正在尝试 运行 从 Windows 机器在 openshift docker 容器 运行ning Linux

中执行以下命令
oc exec openjdk-app-1-l9nrx -i -t --server https://xxx.cloud.ibm.com:30450 \
    --token <token> -n dev-hg jcmd \
    $(ps -ef | grep java | grep -v grep | awk '{print }') GC.heap_dump \
    /tmp/heap1.hprof

它正在尝试评估 jcmd $(ps -ef | grep java | grep -v grep | awk '{print $2}' ) GC.heap_dump /tmp/heap1.hprof 在本地 windows 机器上,我没有 linux 命令。另外,我需要应用程序的进程 ID 运行ning 在容器中而不是我的本地。

感谢任何快速帮助。

试试这个:

oc exec -it openjdk-app-1-l9nrx --server https://xxx.cloud.ibm.com:30450 \
  --token <dont-share-your-token> -n dev-hg -- /bin/sh -c \
  "jcmd $(ps -ef | grep java | grep -v grep | awk '{print $2}')"

甚至:

oc exec -it openjdk-app-1-l9nrx --server https://xxx.cloud.ibm.com:30450 \
  --token <dont-share-your-token> -n dev-hg -- /bin/sh -c \
  "jcmd $(ps -ef | awk '/java/{print $2}')"

问题是 $( ) 片段正在本地进行解释。用双引号括起来也无济于事,因为这种语法是在双引号内解释的。

您必须将双引号替换为单引号(因此 $( ) 未被解释),然后补偿 awk 单引号:

oc exec openjdk-app-1-l9nrx -i -t --server https://xxx.cloud.ibm.com:30450 --token TOKEN -n dev-hg 'jcmd $(ps -ef | grep java | grep -v grep | awk '\''{print }'\'') GC.heap_dump /tmp/heap1.hprof'

请将标签​​ unixshell 添加到您的问题中,因为这更像是一个 UNIX 问题而不是 Openshift 问题。