回答:
パーティーには遅れますが、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:私はこのモジュールの作者です。
私はそれがとても便利であることを知り、その周りにさらに使いやすいラッパー(npm、github)を構築しました。
インストール:
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
WinSerは、人気のあるNSSM(非吸引サービスマネージャー)の node.jsフレンドリーなラッパーです。
次に、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
私は質問に直接対処していませんが、より多くのnode.jsの方法で要件を満たす可能性のある代替案を提供しています。
機能的には次の要件があります。
これらの要件は、プロセスマネージャー(PM)を使用し、システムの起動時にプロセスマネージャーを起動することで満たすことができます。Windowsに適した2つの優れたPMは次のとおりです。
PMを自動的に開始する最も簡単な方法は、「起動時」トリガーを使用してスケジュールされたタスクを作成することです。
pm2
起動時にバッチスクリプトの使用を開始する場合は、環境変数を必ず含めてください。そうしないと機能しません。ここで議論: github.com/Unitech/pm2/issues/1079
プロセスマネージャ+タスクスケジューラのアプローチ私は一年前に投稿さは、いくつかのいずれかオフのサービスのインストールに適しています。しかし最近、私はマイクロサービス方式でシステムを設計し始めました。多くの小さなサービスが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>