Python Twisted에는 twistd
애플리케이션 실행과 관련된 여러 가지 작업에 도움 이되는 명령이 있습니다 (예 : 데몬 화).
현재 세션이 닫힌 후에도 실행할 수 있도록 node.js 서버 를 데몬 화하는 방법은 무엇입니까?
당신의 도움을 주셔서 감사합니다
답변
영원히 당신의 질문에 대한 대답입니다.
설치
$ curl https://npmjs.org/install.sh | sh
$ npm install forever
# Or to install as a terminal command everywhere:
$ npm install -g forever
용법
명령 줄에서 Forever 사용
$ forever start server.js
Node.js에서 Forever 인스턴스 사용
var forever = require('forever');
var child = new forever.Forever('your-filename.js', {
max: 3,
silent: true,
args: []
});
child.on('exit', this.callback);
child.start();
답변
프로세스가 영원히 중계되지 않고 스스로 데몬 화해야하는 경우 데몬 화 모듈을 사용할 수 있습니다 .
$ npm install daemonize2
그런 다음 예와 같이 서버 파일을 작성하십시오.
var daemon = require("daemonize2").setup({
main: "app.js",
name: "sampleapp",
pidfile: "sampleapp.pid"
});
switch (process.argv[2]) {
case "start":
daemon.start();
break;
case "stop":
daemon.stop();
break;
default:
console.log("Usage: [start|stop]");
}
그것은 오히려 낮은 수준의 접근 방식입니다.
답변
systemd
서비스 관리자 데몬 을 시작하려면 서비스 파일을 작성하십시오. 예를 들어 파일을 만듭니다 /etc/systemd/system/myservice.service
.
[Unit]
Description=myservice-description
After=network.target
[Service]
ExecStart=/opt/myservice-location/src/node/server.js --args=here
Restart=always
User=me
Group=group
Environment=PATH=/usr/bin:/usr/local/bin
Environment=NODE_ENV=production
WorkingDirectory=/opt/myservice-location
[Install]
WantedBy=multi-user.target
myservice.service 파일을 변경할 때마다 서비스 관리자 데몬을 업데이트해야합니다.
$ systemctl daemon-reload
그런 다음 서비스 실행을 시작하고 부팅시 서비스가 시작되도록합니다.
$ systemctl start myservice
$ systemctl enable myservice
답변
업데이트 : 나는 pm2의 최신 정보를 포함하도록 업데이트했습니다.
많은 사용 사례에서 systemd 서비스를 사용하는 것이 노드 프로세스를 관리하는 가장 간단하고 적절한 방법입니다. 단일 환경에서 수많은 노드 프로세스 또는 독립적으로 실행되는 노드 마이크로 서비스를 실행하는 경우 pm2는보다 완전한 기능을 갖춘 도구입니다.
https://github.com/unitech/pm2
- 정말 유용한 모니터링 기능이 있습니다-> 여러 프로세스의 명령 줄 모니터링
pm2 monit
또는 프로세스 목록에 대한 예쁜 ‘gui’pm2 list
- 체계적인 로그 관리->
pm2 logs
- 다른 것들 :
- 동작 구성
- 소스 맵 지원
- PaaS 호환
- 보기 및 새로 고침
- 모듈 시스템
- 최대 메모리 재로드
- 클러스터 모드
- 핫 리로드
- 개발 워크 플로우
- 시작 스크립트
- 자동 완성
- 배포 워크 플로
- Keymetrics 모니터링
- API
답변
가장 간단한 방법은 명령을 백그라운드로 보내는 것입니다.
$ node server.js &
그런 다음 나중에 프로세스를 종료 할 수 있습니다. 나는 일반적으로 다음을 수행합니다.
$ killall node
참고 : OS X를 사용하고 있습니다.
답변
당신은 시도 할 수 있습니다:
$ nohup node server.js &
Mac과 Linux에서 작동합니다.
출력은 ./nohup.out
파일에 있습니다.
하지만 난 여전히 당신이 사용하는 것이 좋습니다 pm2
또는 forever
그들이 쉽게 다시 시작 중지 및 로깅에 사용되기 때문에.
답변
같은 고급 범용 주자있다 monit
및 runit
.