Erlangのランタイムシステムは、 erl コマンドにより起動できます。
% erl
Erlang (BEAM) emulator version 5.2.3.5 [hipe] [threads:0]
Eshell V5.2.3.5 (abort with ^G)
1>
erl が理解可能なコマンドライン引数については、 erl(1) を参照してください。この章では、そのうちのいくつかを紹介していきます。
アプリケーションプログラムは、 init:get_argument(Key) や、 init:get_arguments() といった関数を使って、コマンドライン引き数の値にアクセスすることができます。詳しくは init(3) を参照してください。
ランタイムシステムは halt/0,1 を使って停止させることができます。 elrang(3) を参照してください。
init モジュールには、ランタイムシステムを再起動、リブート、停止させるための関数がふくまれます。 init(3) を参照してください。
init:restart()
init:reboot()
init:stop()
もしErlangシェルが停止すると、ランタイムシステムも終了します。
ランタイムシステムは、ブートスクリプトを使って起動します。ブートスクリプトは起動時にどのコードをロードして、どのプロセスとアプリケーションを起動するのかといった命令を含んでいます。
ブートスクリプトファイルの拡張子は .script です。ランタイムシステムはこれのバイナリバージョンのスクリプトを使っています。バイナリ版のブートスクリプトのファイルの拡張子は .boot です。
ブートスクリプトを指定するには、コマンドラインオプションの -boot フラグを使用してください。拡張子の .boot は省略します。例えば、 start_all.boot というファイルを使用する場合には、次のようにコマンドを起動します。
% erl -boot start_all
ブートスクリプトを設定しなかった場合には、 $ROOT/bin/start がデフォルトで設定されます。詳しくは デフォルト・ブートスクリプト を参照してください。
コマンドラインフラグの -init_debug を使うと、 init プロセスがブートスクリプトの実行中に、デバッグ情報を出力するようになります。
% erl -init_debug
{progress,preloaded}
{progress,kernel_load_completed}
{progress,modules_loaded}
{start,heart}
{start,error_logger}
...
ブートスクリプトの文法や、含める内容についての詳細な説明は、 script(4) を参照してください。
Erlang/OTPは2つのブートスクリプトがあります。
start_clean.boot
kernel と STDLIB アプリケーションを起動するためのコードをロードします。
start_sasl.boot
kernel と STDLIB 、 SASL アプリケーションを起動するためのコードをロードします。
start_clean.boot と start_sasl.boot のどちらがデフォルトで使用されるかは、 Install を使用してErlang/OTPをインストールする際にユーザが決定します。「Do you want to use a minimal system startup instead of the SASL startup(SASLを使わない最小のシステムのスタートアップを使用しますか?)」という質問がユーザに対して行われます。もしYesと答えたら start_clean.boot が、 そうでなければ、 start_sasl.boot が使用されます。選択されたブートスクリプトのコピーが作られ、 start.boot という名前に設定されて、 $ROOT/bin ディレクトリに置かれます。
ユーザ定義・ブートスクリプトを作った方が便利だったり、作らざるを得ないという場面がたまにあります。特に コードのロード戦略 で説明するように、組み込みモードでErlangを実行する場合には作ることが多いでしょう。
ブートスクリプトを手で作成することもできますが、 Name.rel という名前のリリースリソースファイルを作り、 systools:make_script/1,2 を使用して生成するやり方が推奨されます。このためには、ソースコードを、 otp_design_principles に従って配置する必要があります。この場合、プログラムがOTPアプリケーションとして実行される必要はなく、純粋なErlangであっても問題ありません。
詳細については、OTPデザイン原則の リリース・リソースファイル の説明と、 rel(4) を参照してください。
バイナリ形式のブートスクリプトファイルの Name.boot は、 systools:script2boot(File) を使用して、 Name.script というブートスクリプトファイルから作られます。
ランタイムシステムは組み込みモードか、対話モードのどちらかで起動することができます。どちらで起動するかは、コマンドラインの -mode フラグを使って決定します。
% erl -mode embedded
デフォルトのモードは interactive です。
組み込みモードでは、システムの起動時に、ブートスクリプトに従ってすべてのコードが読み込まれます。また、コードサーバに明示的に指示することで、後からロードすることもできます。
対話モードでは、最初に参照されたタイミングで動的にロードされます。モジュール内の関数が呼ばれると、コードサーバはコードパスを探索し、モジュールをシステムにロードします。
初めは、コードパスには、現在のワークディレクトリと、 ROOT/lib 以下のすべてのオブジェクトコードのディレクトリが含まれます。この ROOT はErlang/OTPがインストールされたディレクトリです。ディレクトリの名前は、 ``Name[-Vsn]`` という形式で設定され、デフォルトでは、同じ名前の、バージョン番号がより高いディレクトリが選ばれます。 -Vsn というサフィックスはオプションです。もし、 ``Name[-Vsn]`` という名前のディレクトリの中に、 ebin という名前のディレクトリがあったとすると、このディレクトリもコードパスに追加されます。
-pa ディレクトリ や -pz ディレクトリ といったコマンドラインフラグを使用することで、コードパスを拡張することができます。これらのフラグはそれぞれ、コードパスの先頭、もしくは末尾に指定されたディレクトリを追加します。
% erl -pa /home/arne/mycode
コードサーバモジュールにはサーチパスを変更したりチェックしたりするための関数が多く含まれています。 code(3) を参照してください。
次のような種類のファイルがErlang/OTPでは定義されています。
ファイルタイプ | ファイル名/拡張子 | ドキュメント |
---|---|---|
モジュール | .erl | Erlangリファレンスマニュアル |
インクルードファイル | .hrl | Erlangリファレンスマニュアル |
リリースリソースファイル | .rel | rel(4) |
アプリケーションリソースファイル | .app | app(4) |
ブートスクリプト | .script | script(4) |
バイナリ・ブートスクリプト | .boot | |
設定ファイル | .config | config(4) |
アプリケーションアップグレードファイル | .appup | appup(4) |
リリースアップグレードファイル | relup | relup(4) |
Copyright c 1996-2010 Ericsson AB. All Rights Reserved.