如何在 linux 命令行中通过管道将节点名称传递给 ssh?
How to pass node name to ssh through pipe in linux command line?
节点中有多个作业,想看看我的作业在 运行 那里。由于内存问题,该节点被我(用户)占用为睡眠(只是拿走了没有实际工作的节点)并且qstat显示运行状态但实际上没有工作是运行。我需要使用 ssh 检查。
qstat显示如下
- job-ID prior name user state submit/start at queue slots ja-task-ID
- 3508392 0.60500 joonho0 joonho r 2020 年 4 月 9 日 12:17:03 skylake@node02 36
- 3508393 0.60500 joonho1 joonho r 04/09/2020 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 辅助 | grep amp_run.py
我可以在哪里查看作业 "amp_run.py" 是 运行。
但是以下失败了,
- qstat | awk '/@/ {print $8}' |剪切-d@-f2 | xargs ssh ps 辅助 | grep amp_run.py
有没有办法在命令行中执行此操作,而不是编写脚本?或者任何其他检查占用节点而不是所有节点中的 运行 作业的建议?
这是一个简单的 xargs 用法。
当来自管道的参数位于下一个命令的任意位置时,
-I{} 找到这个地方。所以命令应该是 lime this.
- qstat | awk '/@/ {print $8}' |剪切-d@-f2 | xargs -I{} ssh {} ps 辅助 | grep amp_run.py
节点中有多个作业,想看看我的作业在 运行 那里。由于内存问题,该节点被我(用户)占用为睡眠(只是拿走了没有实际工作的节点)并且qstat显示运行状态但实际上没有工作是运行。我需要使用 ssh 检查。
qstat显示如下
- job-ID prior name user state submit/start at queue slots ja-task-ID
- 3508392 0.60500 joonho0 joonho r 2020 年 4 月 9 日 12:17:03 skylake@node02 36
- 3508393 0.60500 joonho1 joonho r 04/09/2020 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 辅助 | grep amp_run.py
我可以在哪里查看作业 "amp_run.py" 是 运行。
但是以下失败了,
- qstat | awk '/@/ {print $8}' |剪切-d@-f2 | xargs ssh ps 辅助 | grep amp_run.py
有没有办法在命令行中执行此操作,而不是编写脚本?或者任何其他检查占用节点而不是所有节点中的 运行 作业的建议?
这是一个简单的 xargs 用法。 当来自管道的参数位于下一个命令的任意位置时, -I{} 找到这个地方。所以命令应该是 lime this.
- qstat | awk '/@/ {print $8}' |剪切-d@-f2 | xargs -I{} ssh {} ps 辅助 | grep amp_run.py