Erlang、rebar3、およびWindowsでのサービスのインストール

ErlangリリースをWindowsでサービスとして機能させる方法。 なぜこれが行われるのかという疑問を舞台裏に残します。 時々必要なだけです。 それでは、HOWに注目しましょう。 さらに難しくするために、 wixtoolsetを使用してこれを行うタスクを設定します。







このメモは一種のチートシートです。 私はそれが決して便利にならないことを本当に願っていますが。 行こう







どういうわけかファイルを設定し、実行時間をもたらしたと想像してください。 コンソールの形でのアプリケーションの起動がトリガーされ、サービスの形でアプリケーションの起動を調整する必要があります。 この段階ですでに問題がある場合-私に書いて、私はちょうどその周りに刻印しました。







だから、ここで私たちはいくつかの楽しい落とし穴を待っています。 何らかの方法でNAME-APPLICATIONスクリプトを実行できます。 そして、それも機能します。 ただし、2つの欠点があります。黒い画面が跳ね上がり、アプリケーションが削除されてもサービスは削除されません。







不足しているものに移りましょう:







1)erts-NUMBER \ binディレクトリにあるerl.iniファイル。 インストール後、その内容にはリリースが収集されたマシンのパスが含まれます。 その内容を変更する必要があります。 そして、パスに二重スラッシュを入れる必要があります。

2)erlsrv.exeファイルを使用してサービスが開始されます。 これはランタイムの一部であり、すべてここで問題ありません。 忘れずに携帯してください。

3)erlsrv.exeは、releases \ VERSIONでstart.bootファイルを見つけることを想定しています。 しかし、彼はそこにいません。 そして、あなたはそれをコピーする必要があります







<DirectoryRef Id="_VERSION"> <Component Id="CopyBootFile" Guid="{GUID}"> <CopyFile Id="start.boot" FileId="APPNAME.boot" DestinationDirectory="_VERSION" DestinationName="start.boot" /> </Component> </DirectoryRef>
      
      





4)erlsrv.exeは、サービスパラメータをレジスタに保存します。 そして、それらは私たち自身によって完成されなければなりません。







今の例







たとえば、奇跡のアプリケーションはerlang_serviceと呼ばれます。 レジスタに書き込みます:







 <RegistryKey Root="HKLM" Key="Software\Ericsson\Erlang\ErlSrv\1.1\erlang_service" > <RegistryValue Type="expandable" Name="Args" Value="-setcookie MY_COOKIE ++ -rootdir &quot;[ProgramFiles64Folder]ErlangService&quot;" /> <RegistryValue Type="string" Name="Comment" Value="Erlang node service" /> <RegistryValue Type="integer" Name="DebugType" Value="0" /> <RegistryValue Type="multiString" Name="Env" Value="" /> <RegistryValue Type="string" Name="InternalServiceName" Value="erlang_service" /> <RegistryValue Type="expandable" Name="Machine" Value="[ROOT]erts-9.2\bin\start_erl.exe" /> <RegistryValue Type="string" Name="Name" Value="" /> <RegistryValue Type="integer" Name="OnFail" Value="0" /> <RegistryValue Type="integer" Name="Priority" Value="32" /> <RegistryValue Type="string" Name="SName" Value="erlang_service" /> <RegistryValue Type="string" Name="StopAction" Value="init:stop()." /> <RegistryValue Type="expandable" Name="WorkDir" Value="[ROOT]" /> </RegistryKey>
      
      





ここにこれがあります:







--rootdir-アプリケーションがインストールされる場所。 そうです。 たとえば、[ROOT]-ディレクトリ自体のIDを使用すると、最後にスラッシュがあるため、何も機能しません。 そしてそれは彼を混乱させます。

InternalServiceName値= "erlang_service"-この名前の下に、サービスを配置します。

SNameはアーランショートネームです

[ROOT]-ファイルが置かれているディレクトリのID。







さて、サービス自体:







 <ServiceInstall Id="ErlangService" Type="ownProcess" Vital="yes" Start="auto" Account="LocalSystem" ErrorControl="normal" Name="erlang_service" DisplayName="ErlangService" Description="erlang_service-[ProductVersion]" Interactive="no" > <ServiceDependency Id="LanmanWorkstation" /> <util:ServiceConfig FirstFailureActionType="restart" SecondFailureActionType="restart" ThirdFailureActionType="none" ResetPeriodInDays="1"/> </ServiceInstall> <ServiceControl Id="ErlangServiceControl" Start="install" Stop="uninstall" Remove="uninstall" Name="erlang_service" Wait="yes" />
      
      





その結果、自動的にインストールされ、停止され、正しく削除されるサービスがあります。







それだけです








All Articles