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.