通过嵌套的SSH连接查询Slurm作业

时间:2019-05-07 14:06:04

标签: bash ssh slurm

我经常在几个不同的集群上运行作业,并且想用一个小的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"

这给了我一个找不到刮刀的命令。

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

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连接的上述输出,而不必手动注销服务器。

如果我忽略了回答我的问题的线索,在此先感谢您的帮助和歉意!

1 个答案:

答案 0 :(得分:1)

以下内容对我有用(假设您具有在clusterX上无需密码即可ssh到clusterY的密钥):

printf "\n Jobs on Cluster Y \n \n"
echo "echo 'squeue -u user' | ssh user@clusterYname"  | ssh user@clusterXname
printf "\n"

我从未尝试过使用ssh来bash -c,但是将命令作为字符串进行管道传输似乎总是可行。