데비안 서버에서 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]
답변
답변
터미널에서 항상 노드 앱을 실행하려면 화면을 사용하십시오.
우분투 / 데비안에 설치하십시오 :
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