Last-modified:2018/03/29 22:54:09.
ここ迄は Grid engine を最初に動かすことを想定して一歩ずつ手順を踏んで確認しながら 進めてきた。 計算機を効率的に量産する為に、もっと簡略化した手順を構築する。
Se series (Se00, …, Se09)を作ることにする。 以下、root で。
##現象
起動直後にはプロセスがいることがあるが、そのあとすぐに死ぬ。
/etc/init.d/gridengine-exec start を手動で打ち込むと起動する。 起動するが、数秒後にはそのプロセスが死ぬ。
##原因
先に キューへの新ホストの登録と、execution host としての登録を マスターホスト でしておく必要があるのだが、 この登録をしていなかった。 おそらく、マスターホストに問い合わせて、 君は実行サーバじゃないから死んどいて、と言われて止まってたんだろう。
##対処
qconf -mq Ge.q
で Ge の新規ホストを全部登録しておき、 qconf -ae Ge02 で Ge02 を実行ホストとして登録したら sge_execd が稼動しつづけるようになり、 また再起動しても sge_execd が稼動し続けるようになった。
ランレベルをコマンドで確認すると、
runlevel
#=>
N 2
ランレベルが変更されておらず(N), 現在値が 2 とのこと。 Debian 系の多くのディストリビューションでは、 ランレベル 2 から 5 を区別しないらしいので、ここは問題なさそう。 /etc/rc*/*gridengine*
を探すと、以下のように ランレベル 2 でちゃんと Start するように指定されている。
ls **/*gridengine-exec -1
#=>
init.d/gridengine-exec*
rc0.d/K21gridengine-exec@
rc1.d/K21gridengine-exec@
rc2.d/S21gridengine-exec@
rc3.d/S21gridengine-exec@
rc4.d/S21gridengine-exec@
rc5.d/S21gridengine-exec@
rc6.d/K21gridengine-exec@
/etc/init.d/gridengine-exec start と service gridengine-exec start では環境変数が違うという話があるので service でやってみたが、 状況は変化せず。
root で「ssh localhost」して、 初回ログインの yes/no をきかれたので yesにしてみたが、これはたぶんあまり関係ない。
/etc/init.d/gridengine-exec start
を実行したときに、以下のようなエラーメッセージが出ることがあった。
error: communication error for "Ge02.calc.atom/execd/1" running on port 6445: "can't bind socket"
error: commlib error: can't bind socket (no additional information available)
...
gridengine-exec を apt-get remove して、 apt-get install しなおしてみた。 関係なし。
/etc/init.d/gridengine-exec を読んでみる。 「. /lib/lsb/init-functions」 で読み込まれる log_daemon_msg() でログが書き出される筈だが、 何も出てない。 “Starting Sun Grid Engine Execution Daemon” とか何とかでるはずなんだが。 /var/run/gridengine/execd.pid が PIDファイルっぽいが、 start してもファイル生成しない。
/usr/lib/gridengine/sge_execd -help
すると以下のようなエラーを吐かれる。
GE 6.2u5
usage: sge_execd [options]
[-help] print this help
daemonize error: child exited before sending daemonize state
このエラーが吐かれて制御が帰ってくるまでの間は sge_execd のプロセスが生きている。
https://github.com/qtrinh/GoogleCloud/tree/master/SGE
critical error: abort qmaster registration due to communication errors
daemonize error: child exited before sending daemonize state
No worries, it might cause by java or previous left-over installation.
を参考に、以下を実行してみたが、いずれもダメ。
apt-get install openjdk-6-jre
apt-get install openjdk-7-jre
apt-get install gridengine-client
少し運用してどう動くのか分かったあとで、 構成を考え直すと良いだろう。
私の環境の場合、
これらを鑑みて、4コアで共通の 並列環境 openmpi4.pe を作って運用することにした。
pe_name openmpi4.pe
slots 999
user_lists NONE
xuser_lists NONE
start_proc_args /bin/true
stop_proc_args /bin/true
allocation_rule 4
control_slaves FALSE
job_is_first_task TRUE
urgency_slots min
accounting_summary FALSE