首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过嵌套SSH连接查询slurm作业

通过嵌套SSH连接查询slurm作业
EN

Stack Overflow用户
提问于 2019-05-07 22:06:04
回答 1查看 80关注 0票数 1

我经常在几个不同的集群上运行作业,并希望使用一个小的bash脚本检查SLURM和SGE作业的状态。

对于大多数集群,我都可以这样做

代码语言:javascript
复制
printf "\n Jobs on Cluster X \n \n"
ssh user@clusterXname bash -c "'
squeue -u user
exit
'"
printf "\n"

这给了我一个类似这样的输出。

AXON上的作业

代码语言:javascript
复制
         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。

我尝试通过以下方式嵌套上面的代码

代码语言:javascript
复制
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找到的命令。

我还尝试将内部命令放入“外部”服务器的脚本中,并运行

代码语言:javascript
复制
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连接寻找类似上面的输出,而不必手动注销服务器。

非常感谢你的帮助,如果我疏忽了回答我问题的帖子,我深表歉意!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-08 03:43:19

下面的方法适用于我(假设您在clusterX上有ssh到clusterY的密钥,而不需要密码):

代码语言:javascript
复制
printf "\n Jobs on Cluster Y \n \n"
echo "echo 'squeue -u user' | ssh user@clusterYname"  | ssh user@clusterXname
printf "\n"

我从未尝试过将bash -c与ssh一起使用,但是将命令作为字符串输入似乎总是有效的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56024467

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档