Я часто выполняю задания в нескольких разных кластерах и хотел бы проверить состояние моих заданий SLURM и SGE с помощью небольшого bash-скрипта.
Я могу сделать это для большинства кластеров с помощью
printf "\n Jobs on Cluster X \n \n"
ssh user@clusterXname bash -c "'
squeue -u user
exit
'"
printf "\n"
. Это дает мне такой вывод.
Задания на AXON
JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)
17251 gpu CL21E1 user R 4:38:15 1 gpu02-02
17252 gpu CL21E2 user R 4:37:06 1 gpu02-03
17253 gpu CL21E3 user R 4:36:27 1 gpu04-03
17254 gpu CL21E4 user R 4:35:23 1 gpu04-04
17255 gpu CL21E5 user R 4:34:46 1 gpu04-05
Тем не менее, один сервер имеет вложенное соединение SSH, поэтому я должен SSH от одного сервера к другому.
Я попытался вложить указанный выше код с помощью
printf "\n Jobs on Cluster Y \n \n"
ssh user@clusterXname bash -c "'
ssh user@clusterYname bash -c '"
squeue -u user
exit
"'
exit
'"
printf "\n"
Это дало мне команду, не найденную для squeue.
Я также попытался поместить внутреннюю команду в скриптна «внешнем» сервере и запустил
printf "\n Jobs on Cluster X \n \n"
ssh user@clusterXname bash -c "'
bash job script.sh
exit
'"
printf "\n"
В этом случае я получил «Псевдо-терминал не будет выделен, потому что stdin не является терминалом».Если я сделаю ssh -t
вместо ssh
, я получу желаемый результат, но мне нужно выйти из соединения ssh.
Итак, что я ищу, так это вывод выше для моего вложенного ssh-соединения без необходимости вручную выходить из сервера.
Большое спасибо заранее за вашу помощь и извинения, если я пропустилответ на мой вопрос!