【发布时间】:2019-05-07 14:06:03
【问题描述】:
我经常在几个不同的集群上运行作业,并且想使用一个小的 bash 脚本检查我的 SLURM 和 SGE 作业的状态。
对于大多数集群,我都可以这样做
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"
在这种情况下,我得到“不会分配伪终端,因为标准输入不是终端。”如果我使用ssh -t 而不是ssh,我会得到我想要的输出,但我必须退出 ssh 连接。
所以我正在寻找的是类似于上面的嵌套 ssh 连接的输出,而无需手动注销服务器。
非常感谢您的帮助,如果我忽略了回答我问题的线程,我们深表歉意!
【问题讨论】:
-
您也可以设置SSH tunnel