以下を介して学校サーバー(HPC)にジョブを送信しようとします。
#!/bin/bash
#$ -S /bin/bash
#$ -cwd
#$ -o ./out_$JOB_ID.txt
#$ -e ./err_$JOB_ID.txt
#$ -notify
#$ -pe orte 1
date
pwd
##################################
RESULT_DIR=~/Results
SCRIPT_FILE=sample_job
##################################
. /etc/profile
. /etc/bashrc
module load packages/comsol/4.4
module load packages/matlab/r2012b
comsol server matlab "sample_job, exit" -nodesktop -mlnosplash
/bin/uname -a
mkdir $RESULT_DIR/$name
cp *.csv $RESULT_DIR/$name
ジョブの中断は次のように言います。
Sun Jun 8 14:20:21 EDT 2014
COMSOL 4.4 (Build: 150) started listening on port 2036
Use the console command 'close' to exit the program
/usr/bin/xterm Xt error: Can't open display:
/usr/bin/xterm: DISPLAY is not set
Program_did_not_exit_normally
Exception:
com.comsol.util.exceptions.FlException: Program did not exit normally
Messages:
Program did not exit normally
Stack trace:
at com.comsol.mli.application.a.a(Unknown Source)
at com.comsol.mli.application.MatlabApplication.doStart(Unknown Source)
at com.comsol.util.application.ComsolApplication.doStart(Unknown Source)
at com.comsol.util.application.ComsolApplication.doRun(Unknown Source)
at com.comsol.bridge.Bridge$2.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
ERROR: Could not start COMSOL Application. See log file: /home/.comsol/v44/logs/server2.log
java.lang.IllegalStateException: Shutdown in progress
at java.lang.ApplicationShutdownHooks.add(Unknown Source)
at java.lang.Runtime.addShutdownHook(Unknown Source)
at org.apache.catalina.startup.Catalina.start(Catalina.java:699)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:322)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:451)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.comsol.util.application.ServerApplication.a(Unknown Source)
at com.comsol.util.application.ServerApplication.a(Unknown Source)
at com.comsol.util.application.ServerApplication.a(Unknown Source)
at com.comsol.util.application.ServerApplication.main(Unknown Source)
原因は何で、どうすれば解決できますか?
答え1
このスクリプトを実行するために送信するときに、GridEngineをクラスタソフトウェアとして使用しているとします。このような:
$ qsub myscript.sh
qsub
次のように、HPCクラスタノードで作成したい結果シェルに環境変数を含めることができます。
$ qsub -v DISPLAY=$(hostname):0.0 myscript.sh
これにより、リモートでGUIを表示したいシステムのホスト名を「注入」する必要があります。
ローカルシステムがリモートで表示されたウィンドウを「受信」できるようにするには、これを行う必要があります。最も簡単でセキュリティレベルが低い方法は次のとおりです。
$ xhost +
これがうまくいき、それを「より安全に」することに興味がある場合は、より明示的に説明できますが、xhost +
これは必ずしも必要ではありません。あなたの考えを教えてください、必要に応じてさらに調整することができます。
上記の方法で動作しない場合はどうなりますか?
最新バージョンには、次のように環境変数を正しく渡すスイッチがqsub
含まれています。-X
$DISPLAY
$ qsub -X myscript.sh
ホスト名の代わりに送信ホストのIPアドレスを試すこともできます。 HPC ノードに DNS が正しく設定されていない可能性があります。
$ qsub -v DISPLAY="$(hostname -i):0.0" myscript.sh