Как передать имя узла в s sh через канал в командной строке linux? - PullRequest
0 голосов
/ 09 апреля 2020

В узлах есть несколько заданий, и я хочу видеть, как там выполняется моя работа. Из-за проблемы с памятью я (пользователь) занят узлом как спящим (только что занял узел без реальной работы), а qstat показывает состояние выполнения, но на самом деле работа не выполняется. Мне нужно проверить, используя s sh.

qstat показывает следующее

  • идентификатор задания предыдущее имя пользовательское состояние submit / start в слотах очереди ja- идентификатор задачи
  • 3508392 0.60500 joonho0 joonho r 09.09.2020 12:17:03 skylake@node02 36
  • 3508393 0.60500 joonho1 joonho r 04.09.2020 12:17:03 skylake@node22 36
  • 3509074 0,00000 Ampong16 Joonho QW 04/09/2020 13:22:20 36

В моем испытании

  • qstat | awk '/ @ / {print $ 8}' | cut -d @ -f2

print

  • node02
  • node22

Я хочу передать их в s sh через трубу, тогда я могу использовать

  • с sh node02 ps aux | grep amp_run.py

, где я могу проверить, выполняется ли задание "amp_run.py".

Но следующее не удается,

  • qstat | awk '/ @ / {print $ 8}' | cut -d @ -f2 | xargs s sh ps aux | grep amp_run.py

Есть ли способ сделать это в командной строке вместо создания сценария? Или любое другое предложение проверить текущие задания на занятых узлах, а не на всех узлах?

1 Ответ

0 голосов
/ 12 апреля 2020

Это было простое использование xargs. Когда аргументы, которые приходят из pipe, находят любое место в следующей команде, -I {} находит это место. Таким образом, команда должна быть извести это.

  • qstat | awk '/ @ / {print $ 8}' | cut -d @ -f2 | xargs -I {} s sh {} ps aux | grep amp_run.py
...