ssh接続した後,バックグラウンドでMATLABスクリプトを実行
早く知りたい方用
sshログイン後,バックグラウンド実行
- script.mを実行し,その標準出力をoutfile.txtに記述
nohup matlab -nosplash -nodesktop -nodisplay -r 'script' > outfile.txt < /dev/null &
- script.mを実行し,標準出力・標準エラー出力は何処にも記述しない
nohup matlab -nosplash -nodesktop -nodisplay -r 'script' > /dev/null 2>&1 < /dev/null &
ブログ全体を読めばこのコマンドの意味が理解でき,自分でカスタマイズできるようになるはずです.
sshログインからmatlab実行
ssh xxx matlab -nodisplay < hogehoge.m
これについてはあまり触れません. MATLABの公式HPのこちらを参照.
概要
上のコマンドは,
のように分けられるので,
- バックグラウンド実行
- MATLABコマンド,オプション
- リダイレクト
に分けてまとめて行こうと思います.
目次
対象読者
やりたいこと
ssh接続を切ってもMATLABスクリプトを実行し続けるようにしたい
オプションを理解して,状況に応じて使い分けたい
バックグラウンド実行
nohupと&
以下のようにコマンドの最後に&を付けると,プログラムをバックグラウンドで実行するようになります.
command &
ただ,ssh接続を切ると,プログラムの実行が終了してしまうので, nohupを付けて終了しないようにします.
ちなみに,nohupはno hang-upの略です.
nohup command &
バックグラウンド実行後のプロセスの確認
バックグラウンド実行すると,その実行が終了したのかなどプロセスの状況が分からなくなります.
そこで,実行したプロセスの状況を見る方法は幾つかありますが,ひとまず
top -c
と打てば,現在動いているプロセスの一覧とそれらの消費リソースを見ることができます.
また,-cオプションをつけることで,そのプロセスを動かした時のコマンドが全て出てくるので,
簡単に対象のプロセスを探すことができます.
沢山のプロセスが動いているサーバで,対象のプロセスを見つけにくい場合は,
-uオプションで自分のユーザー名を指定すると良いかもしれません.
top -c -u username
MATLAB
MATLAB実行オプション
詳しくはこちらを参照ください.
基本的には,バックグラウンド実行のためによく使うものだけを取り上げます.
モードオプション
- -nodesktop
デスクトップを開かずに実行. - -nojvm
JVMソフトウェアなしにMATLABを起動.
デスクトップ ツールやグラフィックスが使えません(恐らく並列計算なども).
その分,起動が早くなります.
表示オプション
スクリプトまたは関数の実行
- -r "hogehoge"
hogehogeの部分にはdisp()のような関数や,sciript.mのようなスクリプトを置き換えます.
また,セミコロン;で区切ることで複数のスクリプトまたは関数を実行できます.
「ダブルクォーテーション“”で囲うこと」と「拡張子.mは書かないこと」に注意してください.
初期作業フォルダ
- -sd "hogehoge"
初期作業フォルダを指定.
Linuxの場合,初期作業フォルダはMATLABを起動したフォルダになります.
他のOSの方はこちらを参照.
-nodisplayと-nodesktopの違い
グラフィックを表示できる環境の場合,nodisplayの場合はグラフィックが表示されないのに対し,
nodesktopの場合はグラフィックのみが表示されるそうです.→参考
また,どちらの場合でもグラフィック(画像等)の保存はされるようです.
注意点
プログラムの実行がずっと終了しないということが起こりえるため,
コマンドに< /dev/null(Windowsの場合はNUL)か,プログラム内にexitまたはquitをつける必要があります.
ただし,後者の場合エラーが出た場合には,永遠に終了しないということが起きうるようです.詳しくはこちらを参照.
- < /dev/null を用いる場合
nohup matlab -r 'script' < /dev/null &
- プログラム内にexitまたはquitをつける場合
nohup matlab -r 'script; exit' &
このように,-rオプションのクオーテーション''内に書くと書きやすいです.
もちろんscript.mの最終行に書いても大丈夫です.
リダイレクト
リダイレクトというのは,プログラムへの入出力は通常ターミナルから(へ)行いますが,
それをファイルから(へ)入出力できるようにすることです.
出力先のリダイレクト
nohupでプログラムを実行すると,デフォルトでは標準出力・標準エラー出力はnohup.outに記述されます.
ここでは,その記述先を変更する方法,および何処にも記述しない方法についてまとめます.
詳しくは他のサイトをご覧ください.
標準出力と標準エラー出力を別ファイルに出力
nohup command > output.log 2>error.log
">"は"1>"と等価で,1は標準出力を,2は標準エラー出力を表しています.
追記する形で,標準出力と標準エラー出力を別ファイルに出力
nohup command >> output.log 2>> error.log
標準出力と標準エラー出力をどこにも記述しない
nohup command >/dev/null 2>&1
標準出力の記述先を"/dev/null"に変更することで記述しないようにしています.
また,"2>&1"は標準出力(1)の記述先を標準エラー出力(2)の記述先に設定するということを表しており,
結果的にどちらの出力も記述しないようにしています.
標準入力先のリダイレクト
command < /dev/null
標準入力をnullとしています.
これによって,実行中に入力待ちが発生してプログラムが永遠に終了しないということを防いでいます.