[node.js] node.js 애플리케이션을 영구적으로 실행하는 방법은 무엇입니까?

데비안 서버에서 Node.js를 설치했습니다. 이 명령 줄을 사용하여 퍼티에서 앱을 시작하는 방법을 이해합니다.

node /srv/www/MyUserAccount/server/server.js

주소 50.51.52.53:8080(IP 및 포트)에서 확인하십시오.

그러나 퍼티를 닫으면 50.51.52.53:8080더 이상 주소에 도달 할 수 없습니다 .

Node.js 애플리케이션을 영구적으로 실행하는 방법은 무엇입니까?

짐작할 수 있듯이 Linux 및 Node.js의 초보자입니다.



답변

다른 답변은 OP의 문제를 해결하지만 모두 과잉 상태이며 왜이 문제가 발생했는지 설명하지 않습니다.

열쇠는이 줄입니다. “퍼티를 닫으면 주소를 찾을 수 없습니다”

Putty에서 원격 호스트에 로그인하면 SSH Linux 프로세스를 시작했으며 해당 SSH 세션에서 입력 한 모든 명령이 해당 프로세스의 하위로 실행됩니다.

문제는 퍼티를 닫을 때 SSH 세션을 종료하여 해당 프로세스와 활성 자식 프로세스를 종료한다는 것입니다. 퍼티를 닫으면 포 그라운드 에서 서버를 실행했기 때문에 실수로 서버를 종료 합니다 . 이 동작을 피하려면 &를 명령에 추가 하여 백그라운드 에서 서버를 실행하십시오 .

node /srv/www/MyUserAccount/server/server.js &

여기서 문제는 리눅스 지식이 부족하고 노드에 대한 질문이 아닙니다. 더 자세한 정보는 http://linuxconfig.org/understanding-foreground-and-background-linux-processes에서 확인 하십시오.

최신 정보:

다른 사람들이 언급했듯이, 노드 서버는 터미널을 나갈 때 여전히 죽을 수 있습니다. 내가 겪었던 공통점은 노드 프로세스가 bg에서 실행 되더라도 stdout이고 stderr이 여전히 터미널을 가리키고 있다는 것입니다. 이는 노드 서버가 console.log 또는 console.error에 쓰면 파이프 오류 및 충돌이 발생 함을 의미합니다. 프로세스의 출력을 파이핑하여 피할 수 있습니다.

node /srv/www/MyUserAccount/server/server.js > stdout.txt 2> stderr.txt &

문제가 지속되면 모든 유형의 프로세스 (데이터베이스, 로깅 서비스, 기타 언어)를 실행하는 데 사용할 수 있기 때문에 노드 특정 솔루션보다 훨씬 강력한 tmux 또는 nohup 과 같은 것을 조사해야합니다 .

서버를 종료시킬 수있는 일반적인 실수는 실행 후 nohup node your_path/server.js &간단히 클릭만으로 퍼티 터미널을 닫는 것입니다. exit대신 명령 을 사용해야 합니다. 그러면 노드 서버가 시작되어 실행됩니다.


답변

다음 과 같이 npm을 사용하여 영원히 설치할 수 있습니다 .

sudo npm install -g forever

그런 다음 응용 프로그램을 시작하십시오.

forever server.js

또는 서비스로 :

forever start server.js

어떤 이유로 든 앱이 충돌하거나 중지되면 앱을 다시 시작합니다. 재시작을 5로 제한하려면 다음을 사용할 수 있습니다.

forever -m5 server.js

실행중인 모든 프로세스를 나열하려면

forever list

괄호 안의 정수를 기록하고 다음과 같이 사용하여 프로세스를 중지하십시오.

forever stop 0

실행중인 프로세스를 다시 시작하면 다음과 같습니다.

forever restart 0

애플리케이션 파일에서 작업중인 경우 파일이 변경 -w될 때마다 매개 변수를 사용하여 자동으로 다시 시작할 수 있습니다 server.js.

forever -w server.js


답변

내장 된로드 밸런서가있는 Node.js 애플리케이션의 프로덕션 프로세스 관리자 인 PM2 를 사용할 수 있습니다 .

PM2 설치

$ npm install pm2 -g

응용 프로그램 시작

$ pm2 start app.js

express를 사용하면 다음과 같이 앱을 시작할 수 있습니다

pm2 start ./bin/www --name="app"

실행중인 모든 프로세스 나열 :

$ pm2 list

모든 프로세스를 나열합니다. 그런 다음 다음 명령으로 앱의 ID 또는 이름을 사용하여 서비스를 중지 / 다시 시작할 수 있습니다.

$ pm2 stop all
$ pm2 stop 0
$ pm2 restart all               

로그를 표시하려면

$ pm2 logs ['all'|app_name|app_id]


답변

충돌이 발생했을 때 노드를 다시 시작 하고 Forever 와 같은 것을 처리하는 Forever 와 같은 것을 찾는 것이 좋습니다 .


답변

터미널에서 항상 노드 앱을 실행하려면 화면을 사용하십시오.

우분투 / 데비안에 설치하십시오 :

sudo apt-get install screen

용법:

$ screen
$ node /path/to/app.js

ctrl + a다음 ctrl + d기각하기

돌아 오려면 :

한 화면 : screen -r

둘 이상이 있으면 다음과 같이 모든 화면을 나열 할 수 있습니다. screen -ls

그리고: screen -r pid_number


답변

당신은 단순히 이것을 사용할 수 있습니다

nohup node /srv/www/MyUserAccount/server/server.js &

이렇게하면 응용 프로그램이 계속 실행되고 종료되므로 응용 프로그램을 종료해야합니다.

이를 위해 설치 htop하고 노드를 검색 한 다음 종료 할 수 있습니다


답변

영원히 그렇게하는 아주 좋은 NodeJs 모듈입니다.

forever명령 행에 입력하여 설치

$ npm install forever -g

그런 다음 다음 명령을 사용하여 node.js 스크립트를 실행하십시오.

$ forever start /path/to/script.js

잘 가세요 또한 당신은 실행할 수 있습니다

$ forever list

실행중인 모든 스크립트를 볼 수 있습니다. 다음을 입력하여 특정 스크립트를 종료 할 수 있습니다

$ forever stop [pid]

명령 [pid]에서 얻을 스크립트의 프로세스 ID는 어디에 있습니까 list? 모든 스크립트를 중지하려면 다음을 입력하십시오.

$ forever stopall