Удаленное выполнение команды Openshift (exec)

Я пытаюсь запустить следующую команду с компьютера Windows в док-контейнере openshift под управлением 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 $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. Кроме того, мне нужен идентификатор процесса приложения, работающего в контейнере, а не мой локальный.

Любая быстрая помощь приветствуется.


person himanshu_mps    schedule 08.08.2020    source источник
comment
Где вы запускаете эту команду? Терминал Windows (cmd.exe), оболочка Windows или эмуляция оболочки UNIX?   -  person caxcaxcoatl    schedule 16.08.2020
comment
Терминал Windows   -  person himanshu_mps    schedule 16.08.2020


Ответы (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 | 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}')"
person SYN    schedule 16.08.2020

Проблема в том, что часть $( ) интерпретируется локально. Окружение его в двойные кавычки не поможет, так как такой синтаксис интерпретируется внутри двойных кавычек.

Вы должны заменить двойные кавычки одинарными кавычками (поэтому $( ) не интерпретируется), а затем компенсировать одинарные кавычки 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'

Пожалуйста, добавьте теги unix и shell к вашему вопросу, так как это больше вопрос UNIX, чем вопрос Openshift.

person caxcaxcoatl    schedule 17.08.2020