【问题标题】:Openshift remote command execution (exec)Openshift 远程命令执行 (exec)
【发布时间】:2020-08-08 21:38:36
【问题描述】:

我正在尝试在运行 Linux 的 openshift docker 容器中从 Windows 机器运行以下命令

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 $2}') 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,而不是我的本地。

感谢任何快速帮助。

【问题讨论】:

  • 您在哪里运行该命令? Windows 终端 (cmd.exe)、Windows Shell 或某些 UNIX shell 仿真?
  • Windows 终端

标签: openshift openshift-origin openshift-client-tools


【解决方案1】:

试试这个:

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}')"

【讨论】:

    【解决方案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 $2}'\'') GC.heap_dump /tmp/heap1.hprof'

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

    【讨论】:

      猜你喜欢
      • 2021-05-10
      • 2011-07-06
      • 1970-01-01
      • 2013-09-07
      • 1970-01-01
      • 2016-12-30
      • 2015-03-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多