이 게시물은 수년 동안 많은 주목을 받았으므로이 게시물의 맨 아래에 플랫폼 당 최고의 솔루션을 나열했습니다.
원본 게시물 :
node.js 서버가 백그라운드에서 실행되기를 원합니다. 즉, 터미널을 닫을 때 서버가 계속 실행되기를 원합니다. 나는 이것을 봤고이 자습서를 생각해 냈지만 의도 한대로 작동하지 않습니다. 따라서 데몬 스크립트를 사용하는 대신 출력 리디렉션 ( 2>&1 >> file
부분)을 사용했다고 생각 했지만 종료되지 않습니다. 출력 / 오류를 기다리는 것처럼 터미널에 빈 줄이 나타납니다.
또한 백그라운드에서 프로세스를 시도했지만 터미널을 닫 자마자 프로세스가 종료됩니다.
로컬 컴퓨터를 종료 할 때 어떻게 실행 상태로 둘 수 있습니까?
최고의 솔루션 :
답변
에서 내 자신의 대답을 복사 나 자체 프로세스로 Node.js를 응용 프로그램을 실행하려면 어떻게합니까?
2015 년 답변 : 거의 모든 Linux 배포판에 systemd가 제공 되므로 영원히, monit, PM2 등이 더 이상 필요하지 않습니다 . OS가 이미 이러한 작업을 처리하고 있습니다.
myapp.service
파일을 만드십시오 (명명하게 앱 이름으로 ‘myapp’로 대체) :
[Unit]
Description=My app
[Service]
ExecStart=/var/www/myapp/app.js
Restart=always
User=nobody
# Note Debian/Ubuntu uses 'nogroup', RHEL/Fedora uses 'nobody'
Group=nogroup
Environment=PATH=/usr/bin:/usr/local/bin
Environment=NODE_ENV=production
WorkingDirectory=/var/www/myapp
[Install]
WantedBy=multi-user.target
유닉스를 처음 접한다면 첫 번째 줄에 /var/www/myapp/app.js
있어야 #!/usr/bin/env node
합니다.
서비스 파일을에 복사하십시오 /etc/systemd/system
.
로 시작하십시오 systemctl start myapp
.
로 부팅시 실행되도록 설정하십시오 systemctl enable myapp
.
로 로그 참조 journalctl -u myapp
이는 Linux, 2018 년 에디션 에서 노드 앱을 배포하는 방법 에서 가져온 것으로 , 여기에는 .service
파일을 포함하여 Linux / 노드 서버를 빌드하기위한 AWS / DigitalOcean / Azure CloudConfig 생성 명령이 포함되어 있습니다.
답변
주어진 노드 스크립트가 지속적으로 (즉, 영원히) 실행되도록하는 간단한 CLI 도구 인 Forever를 사용할 수 있습니다.
https://www.npmjs.org/package/forever
답변
업데이트 -아래 답변 중 하나에서 언급했듯이 PM2 에는 영원히 없어진 멋진 기능이 있습니다. 사용을 고려하십시오.
원래 답변
nohup 사용 :
nohup node server.js &
편집 나는 받아 들여진 대답이 실제로 갈 길이라고 덧붙이고 싶었다. 나는 유지 해야하는 인스턴스에서 영원히 사용하고 있습니다. npm install -g forever
노드 경로에있는 것을 좋아합니다.forever start server.js
답변
이것은 받아 들일 수없는 방법 일 수도 있지만, 특히 개발 중에는 필요에 따라 다시 가져 와서 바보로 만들 수 있기 때문에 화면으로 처리합니다.
screen
node myserver.js
>>CTRL-A then hit D
화면이 분리되고 로그 오프 한 후에도 유지됩니다. 그런 다음 screen -r을 다시 수행 할 수 있습니다. 자세한 내용은 화면 설명서를 누르십시오. 원하는 경우 화면의 이름을 지정할 수 있습니다.
답변
2016 업데이트 :
node-windows / mac / linux 시리즈는 모든 운영 체제에서 공통 API를 사용하므로 절대적으로 관련 솔루션입니다. 하나; node-linux는 systemv init 파일을 생성합니다. systemd의 인기가 계속 높아짐에 따라 Linux에서는 실제로 더 나은 옵션입니다. 누구든지 node-linux에 시스템 지원을 추가하고 싶다면 PR을 환영합니다 🙂
실 :
이것은 꽤 오래된 스레드이지만 node-windows 는 Windows에서 백그라운드 서비스를 만드는 또 다른 방법을 제공합니다. 노드 스크립트 주위 nssm
에 exe
랩퍼 를 사용한다는 개념에 기반을두고 있습니다. 하나; winsw.exe
대신 사용 하고 프로세스가 실패시 시작 / 중지되는 방식을보다 세밀하게 제어 할 수 있도록 구성 가능한 노드 랩퍼를 제공합니다. 이러한 프로세스는 다른 서비스와 마찬가지로 사용할 수 있습니다.
이 모듈은 일부 이벤트 로깅에서도 작동합니다.
스크립트를 데몬 화하는 것은 코드를 통해 수행됩니다. 예를 들면 다음과 같습니다.
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\\my\\node\\script.js'
});
// Listen for the "install" event, which indicates the
// process is available as a service.
svc.on('install',function(){
svc.start();
});
// Listen for the "start" event and let us know when the
// process has actually started working.
svc.on('start',function(){
console.log(svc.name+' started!\nVisit http://127.0.0.1:3000 to see it in action.');
});
// Install the script as a service.
svc.install();
이 모듈은 캡핑 재시작 (잘못된 스크립트가 서버를 방해하지 않음) 및 재시작 간격 증가와 같은 기능을 지원합니다.
노드 윈도우 서비스는 다른 서비스와 같이 실행되므로 이미 사용중인 소프트웨어로 서비스를 관리 / 모니터링 할 수 있습니다.
마지막으로 make
종속성 이 없습니다 . 다시 말해, 간단합니다npm install -g node-windows
하게 작동합니다. 이를 설치하기 위해 Visual Studio, .NET 또는 node-gyp 마술이 필요하지 않습니다. 또한 MIT 및 BSD 라이센스입니다.
전체 공개에서, 나는이 모듈의 저자입니다. OP가 경험 한 정확한 고통을 덜어 주도록 설계되었지만 운영 체제가 이미 제공 한 기능에보다 밀접하게 통합되었습니다. 이 같은 질문을 가진 미래의 시청자들이 유용하다고 생각합니다.
답변
업데이트 : pm2의 최신 정보를 포함하도록 업데이트되었습니다.
많은 사용 사례에서 시스템 서비스를 사용하는 것이 노드 프로세스를 관리하는 가장 간단하고 가장 적합한 방법입니다. 단일 환경에서 수많은 노드 프로세스 또는 독립적으로 실행되는 노드 마이크로 서비스를 실행하는 사용자에게 pm2는보다 완벽한 기능을 갖춘 도구입니다.
https://github.com/unitech/pm2
- 그것은 정말 유용한 모니터링 기능을 가지고 있습니다-> 여러 프로세스가
pm2 monit
있거나 프로세스 목록이있는 명령 줄 모니터링을위한 예쁜 ‘gui’pm2 list
- 조직화 된 로그 관리->
pm2 logs
- 다른 것들 :
- 동작 구성
- 소스 맵 지원
- PaaS 호환
- 시계 및 새로 고침
- 모듈 시스템
- 최대 메모리 재로드
- 클러스터 모드
- 핫 리로드
- 개발 워크 플로우
- 시작 스크립트
- 자동 완성
- 배포 워크 플로
- 키 메트릭 모니터링
- API
답변
완료 될 때까지 중단없이 스크립트를 실행하려면 nohup
여기에 이미 언급 된대로 사용할 수 있습니다. 그러나 어떤 답변도 로그 stdin
및 로 전체 명령을 제공하지 않습니다 stdout
.
nohup node index.js >> app.log 2>&1 &
>>
수단에 추가app.log
.2>&1
에 오류가 전송되어stdout
에 추가 되는지 확인하십시오app.log
.- 끝
&
은 현재 터미널이 명령에서 분리되어 작업을 계속할 수 있도록합니다.
노드 서버 (또는 서버가 다시 시작될 때 백업되어야하는 것)를 실행하려면 systemd / systemctl을 사용해야 합니다.