研究室サーバ関連技術

サーバ

8tops

bdpserv

fujikawa

サーバとの対話

スクリプトの実行

pythonを例に。

pythonプログラムをあるファイルxxxx.pyとして作成したとき、端末のコマンドライン(シェル)上では

  python3 xxxx.py

のようにインタプリタpython3に引数としてプログラムを与えれば実行される。

スクリプトxxxxx.pyの先頭行に"#!"に続けて実行プログラム名(インタプリタ)を入れておくと、以下のスクリプトをそのプログラムで実行できる。


#!/usr/bin/env python3
# -*- coding: utf-8 -*-
'''
コメント

'''
print("test")

このプログラムをそのまま実行するには、実行権限をつけておく。

  chmod +x xxxx.py

サーバでの定期実行 cron

サーバとのファイル共有・転送

NetBIOS (Windowsのファイル共有)

8topsの場合だと、Windowsのエクプローラで、「コンピュータ」を右クリック⇒「ネットワークドライブの割り当て」で "\\8tops.yamanashi.ac.jp\ユーザ名" とすることにより接続可能

bdpservなら"\\bdpserv.yamanashi.ac.jp\ユーザ名"とする。

ファイアウォールでは通さない場合が多いので、ローカルな範囲に限られるが、上記のサーバでは学内ホストに対してはアクセスOKにしてある。

(サーバ側にユーザ登録上の特別な設定が必要なので、それを行っていないサーバがあるかもしれない。アクセスできなかったら尋ねてほしい。)

WinSCP

ファイル転送ソフトとしてはWinSCPが安定している。

手元(ローカル)のコンピュータのフォルダとサーバ側のフォルダを表示し、相互にファイルをコピー、移動できる。

「環境設定」によりエクスプローラ風画面での操作もできる。ただ、ファイルを開くを指定した場合、ファイルを一旦作業用ディレクトリにダウンロードし、保存時にアップロードする作業が行われることに注意(「ファイル共有」にみえるだけで、裏でやっていることはネットワークドライブとは異なる。)

ffftp

(説明省略)

VNC (ウインドウ環境)

VNC(Virtual Network Conputing)プロトコルを利用するとサーバのグラフィック画面を手元のコンピュータで操作できる

設定

   #!/bin/sh

   # Uncomment the following two lines for normal desktop:
   # unset SESSION_MANAGER
   # exec /etc/X11/xinit/xinitrc

   [ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
   [ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
   xsetroot -solid grey
   vncconfig -iconic &
   exec gnome-session &
   gnome-panel &
   gnome-settings-daemon &
   metacity &
   nautilus -n &
  

        vncserver :1

他の人が使っていればディスプレイ番号を2とかにする。(試していないのでうまく行くかどうかわからない。)

    vncserver -kill :1
    vncserver :1

vnc クライアントのインストール

いろいろあるが、 https://www.realvnc.com/download/viewer/ が便利そうである。

利用

          vnc://ホスト名(IPアドレス):5901
    

のように、プロトコル、ホスト名、ポート番号を指定する。

サーバでのjavaプログラムの実行

プログラム作成

サーバ上での実行

シミュレーションのパラメータコマンドライン引数で与える

シミュレーションではパラメータをコマンドライン引数の与えるのが便利である。 たとえば、

java twoLaneSOV.simulation.Main 0.5 0.2 0.02 1.0
のように。(引数はたとえば順に、Pc beta alphaの最初の値 alphaの最後の値)

mainメソッドでの処理の仕方

	public static void main(String[] args) throws IOException {

		double alpha, beta, a, Pc;
		if(args.length!=4) {
			System.out.println("Pc  beta alphaの最小値 最大値 の4つをを引数に与えてください。");
			System.exit(0);
		}
		Pc = Double.parseDouble(args[0]): 0.5;
		beta = Double.parseDouble(args[1]);
		alpha = Double.parseDouble(args[2]);
		double alphaMax = Double.parseDouble(args[3]);
        // 以下略
       }
のように、引数が文字列型配列argsに入っているので、それぞれをDouble等に変換して変数に代入する。

pythonでのコマンドライン引数

https://toyoki-lab.ee.yamanashi.ac.jp/~toyoki/labTips/pythonTips4lab.html を参照

バッチジョブへの投入

端末でのセッションを終了(logout)してもジョブが実行されるように、ジョブを"バックグラウンド"で実行させる。そのためのコマンドがbatchである。(batchはat nowと同様)

echo "java twoLaneSOV.simulation.Main 0.5 0.2 0.02 1.0" | batch

のようにする。バーがパイプを表す。 シェルのヒストリー機能を利用すれば、次のジョブの投入が簡単である。

バッチジョブ終了の知らせ

終了はメールで知らせてくれる。

ホームディレクトリに".forward"というファイルを作り、その中にメールを転送したいアドレスを書いておく。