node.js 서버를 다시 시작하는 방법


81

osx에서 node.js 서버를 설치하고 실행 중입니다. 채팅 모듈을 제공했고 즐겁게 실행 중입니다. 일부 부분을 변경했으며 효과를 보려면 서버를 다시 시작해야합니다.

터미널 창을 닫은 다음 다시 시작하고 chatdemo.js 노드를 다시 실행하여 다시 시작하는 방법 만 알고 있습니다.

터미널을 닫지 않고 다시 시작하는 방법은 무엇입니까?

감사.


1
영원히 github.com/foreverjs/forever 사용하십시오 . 그런 다음 입력 forever restart
해야하는

답변:


102

데몬이 아니라 실행 중이면 Ctrl-C.

데몬 화되면 다음을 시도 할 수 있습니다.

$ ps aux | grep node
you   PID  1.5  0.2  44172  8260 pts/2    S    15:25   0:00 node app.js
$ kill -2 PID

여기서 PID의 출력에서 숫자에 의해 대체된다 ps.


9
같은 효과가있는 "killall -2 node"를 사용할 수도 있습니다.
user123444555621

2
모든 노드 프로세스 를 죽이기를 원하거나 필요로하지 마십시오 . 만약 내가 어떤 노드 REPL의 오픈 나는 :) 그 선 후 불행한 캠핑 수 있습니다
rfunduk

7
참고 : 노드 데몬 시작nohup node server.js &
Drew LeSueur

52

개발 중에 변경 사항을 확인하기 위해 서버를 다시 시작하는 가장 좋은 방법은 nodemon 을 사용하는 것입니다.

npm 설치 nodemon -g

nodemon [앱 이름]

nodemon은 nodemon이 시작된 디렉토리의 파일을 감시하고 변경되면 자동으로 노드 응용 프로그램을 다시 시작합니다.

nodemon git repo 확인 : https://github.com/remy/nodemon


이 모듈에 대해 몰랐습니다. 매우 유용한 것입니다. 장고 앱이 생각납니다. 감사.
Hola Soy Edu Feliz Navidad

환상적인 제안. 코드를 빠르게 테스트하는 개발에 매우 ​​효율적입니다.
mbokil

좋아, 어떻게 우리가 node .. 대신 nodemon을 사용하도록 이클립스를 구성 할 수 있습니까?
Alexander Mills

16

이 경우 node.js 서버는 활성 개발 중이고 항상 변경하기 때문에 자주 다시 시작합니다. 모든 .js 파일을보고 해당 파일이 변경된 경우 node.js 서버를 다시 시작하여이를 처리 할 수 있는 훌륭한 핫 리로드 스크립트가 있습니다. 신속한 개발 및 테스트를위한 티켓입니다.

사용 방법에 대한 스크립트와 설명은 여기 Draco Blue에 있습니다.


5
참고로 여기에 전용 노드 모듈이 여러 개 있습니다 . Node modules Wiki 페이지를 살펴보십시오 .
Marco

14

나는 같은 문제가 있었고 모든 기존 노드 프로세스를 죽이는이 쉘 스크립트를 작성했습니다.

#!/bin/bash
echo "The following node processes were found:"
ps aux | grep " node " | grep -v grep
nodepids=$(ps aux | grep " node " | grep -v grep | cut -c10-15)

echo "OK, so we will stop these process/es now..."

for nodepid in ${nodepids[@]}
do
echo "Stopping PID :"$nodepid
kill -9 $nodepid
done
echo "Done"

쉘 스크립트 (xxx.sh) 파일로 저장 한 후 여기에 설명 된대로 PATH에 추가 할 수 있습니다 .

(이것은 grep 자신의 이름을 제외하고 이름에 "node"가있는 모든 프로세스를 종료하므로 어떤 경우에는 비슷한 이름을 가진 다른 프로세스도 종료 될 수 있습니다.)


2
나는 맥 OSX I에있어하는 것은 사용했다cut -c17-20
ThomasReggi

1
이것이 정확히 무엇 pkill node입니까?
tandrewnichols

6

"nodemon"이라고 말하면 질문에 답할 수 있습니다.

그러나 (모든) 노드 악마를 죽이는 방법에 관해서는 다음이 저에게 효과적입니다.

pkill -HUP node

5

내 의견이 창과 관련이 있다는 것을 이해하지만 누군가가 유용 할 수 있습니다. cmd에서 실행되는 win의 경우 :

wmic process  where "commandline like '%my_app.js%' AND name='node.exe' " CALL Terminate

그런 다음 앱을 다시 실행할 수 있습니다.

node my_app.js

또한 이스케이프 따옴표와 함께 배치 파일에서 사용할 수 있습니다.

wmic process  where "commandline like '%%my_app.js%%' AND name='node.exe' " CALL Terminate
node my_app.js

매우 편리합니다! 좋은 생각입니다.
Radmation

2

"kill -9 [PID]"또는 "killall -9 node"를 사용하면 "kill -2 [PID]"가 작동하지 않는 곳에서 작동했습니다.


2

콘솔에서 노드 앱을 실행하는 경우 (영원히 사용하지 않는 등) control + C를 사용합니다. OSX가 종료 할 키 조합이 동일한 지 확실하지 않지만 프로세스 ID를 찾아 죽이는 것보다 훨씬 빠르면 다음을 추가 할 수도 있습니다. 사용중인 채팅 앱에 다음 코드를 입력 한 다음 앱을 종료 할 때마다 콘솔에 'exit'를 입력합니다.

process.stdin.resume();
process.stdin.setEncoding('utf8');

process.stdin.on('data', function(data) {
  if (data == 'exit\n') process.exit();
});

1

먼저 터미널 / 명령 줄을 열고 프로젝트 디렉토리로 이동 한 다음 npm install nodemon --save-dev 명령을 사용하여 nodemon설치합니다. 이 명령은 개발자 종속성으로 저장되었는지 확인합니다. expressjs 로 작업하는 경우 패키지 파일에서 다음과 같이 보일 것입니다.

{
  "name": "expressjs-app",
  "version": "0.0.0",
  "private": true,
  "scripts": {
    "start": "node ./bin/www"
  },
  "dependencies": {
    "cookie-parser": "~1.4.4",
    "debug": "~2.6.9",
    "express": "~4.16.1",
    "http-errors": "~1.6.3",
    "morgan": "~1.9.1",
    "pug": "^2.0.4"
  },
  "devDependencies": {
    "nodemon": "^2.0.3"
  }
}

이제 package.json 파일에서 "start"값을 수정합니다. 프로덕션에서는 기존 값을 사용하지만 개발에서는 nodemon을 사용하여 서버를 다시 시작하지 않고 소스 파일의 변경 사항을 추적합니다. start의 새 값은 "start"입니다. "if [[$ NODE_ENV == 'production']]; 다음 노드 ./bin/www; else nodemon ./bin/www; fi"

최종 package.json 파일은 다음과 같습니다.

{
  "name": "expressjs-app",
  "version": "0.0.0",
  "private": true,
  "scripts": {
    "start": "if [[$NODE_ENV=='production']]; then node ./bin/www; else nodemon ./bin/www; fi"
  },
  "dependencies": {
    "cookie-parser": "~1.4.4",
    "debug": "~2.6.9",
    "express": "~4.16.1",
    "http-errors": "~1.6.3",
    "morgan": "~1.9.1",
    "pug": "^2.0.4"
  },
  "devDependencies": {
    "nodemon": "^2.0.3"
  }
}

nodemon jusy를 제거하려면 간단히 npm uninstall nodemon 명령을 실행하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.