如何在Linux命令行中通过管道将节点名称传递给ssh?

时间:2020-04-09 09:23:31

标签: linux ssh pipe xargs

节点中有几个作业,希望看到我的作业正在那里运行。由于内存问题,该节点被我(用户)占用为睡眠状态(只是使该节点没有实际作业),而qstat显示了运行状态,但实际上没有任何作业在运行。我需要使用ssh检查。

qstat 显示如下

  • 职位ID姓氏用户状态提交/从队列插槽ja-task-ID开始
  • 3508392 0.60500 joonho0 joonho r 2020年4月9日12:17:03 skylake @ node02 36
  • 3508393 0.60500 joonho1 joonho r 2020年4月9日12:17:03 skylake @ node22 36
  • 3509074 0.00000 amplong16 joonho qw 04/09/2020 13:22:20 36

在我的审判中,

  • qstat | awk'/ @ / {print $ 8}'|切-d @ -f2

打印

  • node02
  • node22

我想将这些通过管道传递给ssh,然后可以使用

  • ssh node02 ps aux | grep amp_run.py

我可以在其中检查作业“ amp_run.py”是否正在运行。

但是以下操作失败,

  • qstat | awk'/ @ / {print $ 8}'|切-d @ -f2 | xargs ssh ps aux | grep amp_run.py

有没有一种方法可以在命令行中执行此操作,而不是编写脚本?还是有其他建议检查占用节点而不是所有节点中正在运行的作业?

1 个答案:

答案 0 :(得分:0)

这是一个简单的xargs用法。 当来自管道的参数在下一个命令中找到任何位置时, -I {}找到位置。因此,命令应对此加以限制。

  • qstat | awk'/ @ / {print $ 8}'|切-d @ -f2 | xargs -I {} ssh {} ps aux | grep amp_run.py