[node.js] node.js 서버를 데몬 프로세스로 어떻게 시작합니까?

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

http://pm2.io

  • 정말 유용한 모니터링 기능이 있습니다-> 여러 프로세스의 명령 줄 모니터링 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그들이 쉽게 다시 시작 중지 및 로깅에 사용되기 때문에.


답변

같은 고급 범용 주자있다 monitrunit.