SourceChord

C#とXAML好きなプログラマの備忘録。最近はWPF系の話題が中心です。

WinserでNode.jsのサーバーをサービス化してみる

Node.jsで作ったアプリをWindows上でサービスとして動作させる方法を調べてみました。
サービスにすることで、通常の常駐アプリなどとは異なり、PC起動後ユーザーとしてログインする前でも、アプリを動作させたりすることができます。


Windows環境向けでは、Winserってライブラリが使われることが多いようです。
ってことで、Winserを試してみました。

Winserとは

Node.jsのアプリをWin環境でサービス化して動作させるためのライブラリです。
https://www.npmjs.com/package/winser

このWinserというライブラリでは、内部でnssmというアプリを使用しています。
これは、任意のexeをサービスとして動作させるためのアプリです。
https://nssm.cc/

なので、Winserを使ってサービス化すると、以下のようにnssmのプロセスも一緒に立ち上がります。
f:id:minami_SC:20150521010106p:plain

Winserのインストール

まずは、プロジェクトのルートから、以下のコマンドでインストールします。

npm install winser --save

各種npmスクリプトの用意

winserのコマンドを簡単に呼び出せるように、package.jsonのscriptに以下のような項目を追加しておきます。

installService サービスの登録
uninstallService サービス登録解除
package.json
{
    "name": "WinserTest",
    "version": "0.0.0",
    "description": "WinserTest",
    "main": "server.js",
    "dependencies": {
        "winser": "^1.0.0"
    },
    "scripts": {
        "start": "node server.js",
        "installService": "winser -i -a",
        "uninstallService": "winser -r -x"
    }
}

ちなみに、-a, -xのオプションをそれぞれつけていますが、これらを付けておくことで、サービス登録と同時にサービスの実行を開始したり、サービス登録解除と同時にサービス自体の実行を停止したり、ということができます。

使い方

以下の各種操作は、管理者権限コマンドプロンプトから実行する必要があるので要注意!!
f:id:minami_SC:20150521005534p:plain:w250
サービスの登録/登録解除は、package.jsonのあるディレクトリで、以下のコマンドを打つことで実行できます。

サービスの登録
npm run installService
サービスの登録解除
npm run uninstallService


サービスが正常に登録されたか?サービスが現在実行されているか?などという情報は、管理ツールのサービスコンソールで確認することができます。
f:id:minami_SC:20150521011039p:plain:w400
※この画面は「ファイル名を指定して実行」で「services.msc」と入力して開くことができます。

任意のタイミングでのサービスの停止/再開

サービスが登録された状態では、コマンドプロンプトから以下のコマンドを打つことで、サービスを実行/停止をさせることができます。
これらのコマンドも、管理者権限のコマンドプロンプトから実行する必要があります。

コマンド 内容
sc start サービス名 サービスを登録してからこのコマンドを実行することでサービスを開始します。
sc stop サービス名 (サービスを実行中の場合)サービスを停止します。

(「サービス名」はpackage.jsonのnameプロパティに定義した値)