Erlang アプリケーションをコマンドラインで起動し、その後停止する方法

どこを探しても情報が見つからなかったので、試行錯誤して以下のようにしました。
もっと良い方法があったらぜひ教えてください。

起動

behaviour application に準拠したアプリケーション(hige_app)をコマンドラインから起動するには

% erl -noshell -noinput -s hige_app start -name hige@localhost

とします。hige_app:start では application:start(hige) が呼ばれるイメージです。
アプリケーションがウェブサーバーのように常駐するプロセスの場合、起動時に -s init stop をつけるとすぐに終了してしまうので注意。
起動はバックグラウンドプロセスにしても良いでしょう。

停止

停止は起動したターミナルで Ctrl-C 。では済まない場合があります。
例えば /etc/init.d/hige stop のように stop したいときがあります。
この場合どうするかというと、「起動しているアプリケーション内で」

  • application:stop を呼ぶ
  • init:stop を呼ぶ

必要があります。


なので以下の hige_app:stop を用意します。

stop() ->
    case init:get_argument(target_node) of
        {ok,[[Node]]} ->
            ok = rpc:call(list_to_atom(Node), application, stop, [hige]),
            ok = rpc:call(list_to_atom(Node), init, stop, []);
        _ -> []
    end.

そしてコマンドラインから

% erl -name dummy
--- noshell \
--- noinput \
--- target_node hige@localhost \
--- s hige_app stop 

とすればめでたく終了します。

補足