私たちの大学には、SLURMが管理するクラスタがあります。問題は、一部のリソースがコマンドに表示されないにもかかわらず実装されない場合があることですsqueue
。たとえば、scancel
数日前に割り当てられたリソースをシャットダウンしたにもかかわらず、ノードの1つから多くのCPUが私に割り当てられていることを確認しました!私はそれらを見つけて殺したい。
自分のローカルコンピュータで公開およびプライベートSSHキーを生成したので、、、ssh-keygen
...を使用してすべてのコンピュータにログインできますが、ノード名は順番になっていません。これらのノードのいずれかにログインし、次の結果を実行すると:ssh foo
ssh [email protected]
ssh [email protected]
sinfo
PARTITION AVAIL TIMELIMIT NODES STATE NODELIST
debug up infinite 3 mix baz[080-081,083]
debug up infinite 2 alloc grault,baz082
debug up infinite 13 idle baz[061-070],corge,bar,quux
gpu_p100 up infinite 1 mix baz080
gpu_titan-x up infinite 2 mix baz[081,083]
gpu_titan-x up infinite 1 alloc baz082
r730 up infinite 1 mix baz080
t630 up infinite 2 mix baz[081,083]
t630 up infinite 1 alloc baz082
r930 up infinite 1 alloc grault
m610 up infinite 10 idle baz[061-070]
r720 up infinite 1 idle corge
r815 up infinite 1 idle bar
sm1u up infinite 1 idle quux
main* up infinite 3 mix baz[080-081,083]
main* up infinite 2 alloc grault,baz082
main* up infinite 12 idle baz[061-070],bar,quux
これは3つのbaz[081-083]
ノードを意味しますbaz081
。いいえ、これらのノードの1つにSSHを接続すると、特定のユーザーに割り当てられているすべてのプロセスを一覧表示できます。baz082
baz083
ps -A | grep user1
しかし、時間がかかります。このプロセスを自動化するにはどうすればよいですか?
- ノードの1つにログイン
- 走る
sinfo
sinfo
情報を抽出し、コマンドの最後の列から文字列リストを作成します。- 特定のユーザーに対して実行されているすべてのプロセスを見つけて
user1
端末に印刷する
これらの手順を自動化するためにスクリプト(好ましくはCmder / ConEmu互換)を作成するにはどうすればよいですか?
ベストアンサー1
その後、すべてのノードにログインを試み、user1のプロセスを印刷します。
for hostList in $(sinfo -h | awk '{print $6}' | sort -u); do
for host in $(scontrol show hostname $hostList); do
echo $host; ssh $host "ps aux | grep user1";
done;
done;
ただし、オフラインノードにログインしたくないので、sinfoコマンドを次のように拡張します。
for hostList in $(sinfo -h | grep -v down | awk '{print $6}' | sort -u); do
sinfo/scontrol をよりよく理解したら、これを行うより良い方法があるかもしれませんが、このスクリプトはそのタスクを実行する必要があります。
しかし、このようなことが頻繁に発生する場合、孤立プロセスがしばしばクラスタのパフォーマンスに害を及ぼす可能性があることを管理者と議論することを検討することができます。理想的には、システムは定期的に自動的に清掃する必要があります。