【问题标题】:Query slurm jobs through nested SSH connections通过嵌套的 SSH 连接查询 slurm 作业
【发布时间】: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 连接的输出,而无需手动注销服务器。

非常感谢您的帮助,如果我忽略了回答我问题的线程,我们深表歉意!

【问题讨论】:

标签: bash ssh slurm


【解决方案1】:

以下内容对我有用(假设您有 ssh 到 clusterY 的密钥,但在 clusterX 上没有密码):

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

我从未尝试过使用 ssh 的 bash -c,但在命令中以字符串的形式管道传输似乎总是有效的。

【讨论】:

  • 非常感谢!它可以工作,但是在获得输出之前,我得到了 3 次“不会分配伪终端,因为 stdin 不是终端”。我考虑将其写入文件并在最后一步删除该行以逐行打印文件。
  • 完成了这项工作。
  • 我认为使用-q 选项将关闭大多数警告。
猜你喜欢
  • 2012-05-05
  • 2022-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-06
  • 2019-05-05
  • 2017-02-12
  • 1970-01-01
相关资源
最近更新 更多