Windows 서비스로 node.js를 설치하는 방법?


130

node.js 실행 파일 을 다운로드했습니다 . 해당 실행 파일을 Windows 서비스로 어떻게 실행할 수 있습니까? node.js의 여러 버전을 동시에 실행해야하므로 표준 node.js 설치 프로그램을 사용할 수 없습니다.

답변:


187

파티에 늦었지만 노드 윈도우 도 트릭을 수행합니다.

여기에 이미지 설명을 입력하십시오

시스템 로깅도 내장되어 있습니다.

여기에 이미지 설명을 입력하십시오

코드에서 스크립트를 작성하는 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에 추가하고 싶은 한 가지 : CLI에서 생성 된 js 스크립트를 실행하는 방법 : 예 :> node set_up_win_service.js ...
— mike rodent

@Corey 이 모듈을 사용하여 JXCore 패키지를 서비스로 실행할 수있는 방법은 무엇입니까?
— Madhur

@ 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"노드 ABS 팁 "-g 0.25 -w 1 -r 3 -an] 0으로 종료
— Mechkov

@Mechkov-0으로 끝나는 것은 성공적인 종료를 의미합니다. node-windows없이 스크립트를 성공적으로 실행할 수 있습니까?
— Corey

40

나는 너무 유용한 래퍼 ( 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

정말 고마워요 !! 쿼키, 그것은 나를 위해 작동합니다 (승 10 64 비트)
— Furkan

“npm ERR! asyncWrite는 함수가 아닙니다.”“npm ERR! pna.nextTick은 기능이 아닙니다”
— Timwi

감사합니다. 사용하기 매우 쉽습니다.
— Enrique Flores

27

WinSer 는 인기있는 NSSM (Non-Sucking Service Manager)을 중심으로하는 node.js 친화적 인 래퍼입니다.


NSSM은 호스팅되지 않은 응용 프로그램 충돌을 처리하기 때문에 Non-Sucking이라고 가정하기 때문에 실제로는 호스팅되는 응용 프로그램을 빨아 들이기 때문에 NSSM을 좋아하지 않습니다. Microsoft이기 때문에 일반적으로 Microsoft를 비난하는 것을 좋아하지 않습니다.
— Felice Pollano

2
@FelicePollano NSSM은 랩핑 된 프로세스가 종료 되더라도 서비스를 실행 상태로 유지하는 srvany와 같은 다른 솔루션과 달리 호스팅 된 애플리케이션을 모니터링하기 때문에 비 흡인이라고 가정합니다.
— Jürgen Steinblock

@ JürgenSteinblock 이것은 정확히 내가 말한 것입니다 : 호스팅 응용 프로그램은 서비스 관리자 자체가 아니라 빠는 것입니다.
— Felice Pollano

2
@FelicePollano 호스팅 된 응용 프로그램 종료는 무언가 나쁜 것을 의미하지 않습니다. 요점은 NSSM이 실제 서비스 상태를 반영 (또는 올바르게 구성한 경우 반영 할 수 있음)하므로 다른 서비스 관리자와 같은 실행 상태를 가정하는 대신 서비스를 모니터링 할 수 있습니다 (사용자는 호스트 된 프로세스를 종료하고 srvary는 여전히 서비스가 실행중인 상태).
— Jürgen 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 친화적 인 두 가지 좋은 PM은 다음과 같습니다.

PM이 자동으로 시작되도록하는 가장 간단한 방법은 "시작시"트리거를 사용하여 예약 된 작업을 만드는 것입니다.

여기에 이미지 설명을 입력하십시오


pm2시작시 배치 스크립트 사용 을 시작하려고 하면 환경 변수를 포함시켜야합니다. 그렇지 않으면 작동하지 않습니다. 여기에서 논의하십시오 : github.com/Unitech/pm2/issues/1079
— steampowered

@ steampowered 어떻게 PM2_Home 경로를 제공합니까?
— charan tej

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.