node.jsをWindowsサービスとしてインストールする方法


130

node.js実行可能ファイルをダウンロードしました。その実行可能ファイルをWindowsサービスとして実行するにはどうすればよいですか?複数のバージョンのnode.jsを同時に実行する必要があるため、標準のnode.jsインストーラーを使用できません。

回答:


187

パーティーには遅れますが、node-windowsでもうまくいきます。

ここに画像の説明を入力してください

また、システムロギングが組み込まれています。

ここに画像の説明を入力してください

コードからスクリプトを作成するためのAPIがあります。

var Service = require('node-windows').Service;

// Create a new service object
var svc = new Service({
  name:'Hello World',
  description: 'The nodejs.org example web server.',
  script: 'C:\\path\\to\\helloworld.js'
});

// Listen for the "install" event, which indicates the
// process is available as a service.
svc.on('install',function(){
  svc.start();
});

svc.install();

FD:私はこのモジュールの作者です。


3
第二に、その「素晴らしい」。私はあなたのreadmeの指示に従っただけで、箱から出してすぐに動作しました-非常にまれです!readmeに追加したいことが1つだけあります。CLIで作成されたjsスクリプトを実行する方法です。つまり、> node set_up_win_service.js ...
mike

@Corey このモジュールを使用してサービスとしてJXCoreパッケージを実行する方法はありますか?
Madhur 2014

@Madhur-理論的には動作する可能性がありますが、テストしていないし、テストする予定もありません。node-windowsは、監視/再起動を担当するwrapper.jsファイルを使用します。ただし、これはノードスクリプトを子プロセスとして起動するだけです。実行可能パス(つまり、ノードの代わりにjx)を構成することもできます。したがって、理論的には、おそらくこれを行うことができますが、どのような癖が発生する可能性があるのか​​はわかりません。
Corey

@Corey私は単純なHttp Nodeアプリを持っていますが、このサービスを使用して実行し続けることができないようです。インストールして正常に起動しますが、すぐに停止します。何か助けていただければ幸いです!イベントビューアにはエラーは表示されませんが、警告:子プロセス[50732-C:\ Program Files \ nodejs \ node.exe --harmony "C:\ Users \ bmechkov \ AppData \ Roaming \ npm \ node_modules \ node-windows \ lib \ wrapper.js "-f" C:\ dev \ Node \ abs_tips \ server.js "-l" NODE ABS TIPS "-g 0.25 -w 1 -r 3 -an] 0で終了
Mechkov

@Mechkov-0で終了すると、正常に終了します。node-windowsなしでスクリプトを正常に実行できますか?
コーリー

40

私はそれがとても便利であることを知り、その周りにさらに使いやすいラッパー(npmgithub)を構築しました。

インストール:

npm install -g qckwinsvc

サービスのインストール:

qckwinsvc

prompt: Service name: [name for your service]
prompt: Service description: [description for it]
prompt: Node script path: [path of your node script]
Service installed

サービスのアンインストール:

qckwinsvc-アンインストール

prompt: Service name: [name of your service]
prompt: Node script path: [path of your node script]
Service stopped
Service uninstalled

ありがとう、とても簡単です!! 変な、それは私のために動作します(win 10 64ビット)
Furkan

「npm ERR!asyncWriteは関数ではありません」「npm ERR!pna.nextTickは関数ではありません」
Timwi

ありがとう、これはとても使いやすいです。
エンリケフローレス

27

WinSerは、人気のあるNSSM(非吸引サービスマネージャー)の node.jsフレンドリーなラッパーです。


NSSMはホスト型アプリケーションのクラッシュを処理するため非吸引型であると想定しているため、NSSMは好きではありません。それがマイクロソフトであるという理由だけで、マイクロソフトを一般的に非難することは好きではありません。
Felice Pollano

2
@FelicePollano NSSMは、ホストされたアプリケーションを監視するため、非吸い込みであると想定します。これは、ラップされたプロセスが停止しても、サービスを実行状態のままにするsrvanyなどの他のソリューションとは異なります。
ユルゲン・Steinblock

@JürgenSteinblockこれはまさに私が言ったことです:ホストされたアプリケーションは、サービスマネージャー自体ではなく、吸い込んでいます
Felice Pollano

2
ホストされているアプリケーションの出口である@FelicePollanoは、何か悪いことを意味するわけではありません。ポイントは:NSSMは実際のサービス状態を反映する(または適切に構成されている場合は反映する)ため、他のサービスマネージャーのように実行状態を想定するのではなく、サービスを監視できます(ユーザーがホストされているプロセスを強制終了するとsrvaryが引き続き表示されるため)実行状態のサービス)。
ユルゲン・Steinblock

16

このブログから

次に、IISと同様に、ノードをサービスとしてホストしたいと思いました。このようにして、私のマシンで起動し、バックグラウンドで実行し、クラッシュした場合に自動的に再起動します。

ここから、非吸い上げサービスマネージャーであるnssm重要な役割を果たします。このツールを使用すると、通常の.exeをWindowsサービスとしてホストできます。

以下は、ノードアプリケーションのインスタンスをサービスとして設定し、管理者のようにcmdを開き、次のコマンドを入力するために使用したコマンドです。

nssm.exe install service_name c:\your_nodejs_directory\node.exe c:\your_application_directory\server.js
net start service_name

14

私は質問に直接対処していませんが、より多くのnode.jsの方法で要件を満たす可能性のある代替案を提供しています。

機能的には次の要件があります。

  1. ロジック(アプリ)をバックグラウンドで実行する
  2. ロジックを開始/停止できる
  3. システムの起動時にロジックを自動的に開始します

これらの要件は、プロセスマネージャー(PM)を使用し、システムの起動時にプロセスマネージャーを起動することで満たすことができます。Windowsに適した2つの優れたPMは次のとおりです。

PMを自動的に開始する最も簡単な方法は、「起動時」トリガーを使用してスケジュールされたタスクを作成することです。

ここに画像の説明を入力してください


pm2起動時にバッチスクリプトの使用を開始する場合は、環境変数を必ず含めてください。そうしないと機能しません。ここで議論: github.com/Unitech/pm2/issues/1079
Steampowered

@steampowered PM2_Homeパスをどのように与えるか?
charan tej 2017

0

プロセスマネージャ+タスクスケジューラのアプローチ私は一年前に投稿さは、いくつかのいずれかオフのサービスのインストールに適しています。しかし最近、私はマイクロサービス方式でシステムを設計し始めました。多くの小さなサービスがIPCを介して互いに話し合っています。そのため、各サービスを手動で構成することは耐えられなくなりました。

手動構成なしでサービスをインストールするという目標に向けて、実行可能ファイルをサービスとしてインストールするコマンドラインツール(でインストール)であるsermanを作成しましたnpm i -g serman。書き込む必要があるのは(そして一度だけ書き込むだけ)、実行可能ファイルと一緒の単純なサービス構成ファイルです。走る

serman install <path_to_config_file>

サービスをインストールします。stdoutそしてstderr、すべてログに記録されています。詳細については、プロジェクトのウェブサイトをご覧ください

以下に示すように、作業構成ファイルは非常に単純です。ただし<env><persistent_env>以下のような多くの便利な機能も備えています。

<service>
  <id>hello</id>
  <name>hello</name>
  <description>This service runs the hello application</description>

  <executable>node.exe</executable>

  <!-- 
       {{dir}} will be expanded to the containing directory of your 
       config file, which is normally where your executable locates 
   -->
  <arguments>"{{dir}}\hello.js"</arguments>

  <logmode>rotate</logmode>

  <!-- OPTIONAL FEATURE:
       NODE_ENV=production will be an environment variable 
       available to your application, but not visible outside 
       of your application
   -->
  <env name="NODE_ENV" value="production"/>

  <!-- OPTIONAL FEATURE:
       FOO_SERVICE_PORT=8989 will be persisted as an environment
       variable machine-wide.
   -->
  <persistent_env name="FOO_SERVICE_PORT" value="8989" />
</service>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.