[node.js] 시스템 재시작시 영원히 자동으로 시작 (노드)

노드의 영구 모듈을 사용하여 노드 서버를 계속 실행 중입니다. 그러나 시스템을 다시 시작하면 영원히 종료됩니다. 시스템이 다시 시작될 때 노드 서버를 자동으로 시작할 수있는 방법이 있습니까?



답변

crontab을 사용하는 것이 좋습니다. 사용하기 쉽습니다.

어떻게

  1. 편집을 시작하려면 다음을 실행하여 “testuser”를 노드 프로세스의 원하는 런타임 사용자로 바꾸십시오. 자신 이외의 다른 사용자를 선택하는 경우 sudo를 사용하여이를 실행해야합니다.

    $ crontab -u testuser -e
  2. 이전에이 작업을 수행 한 적이 없다면 편집 할 편집기를 묻습니다. 나는 vim을 좋아하지만 사용하기 쉽도록 nano를 권장합니다.

  3. 편집기에서 다음 행을 추가하십시오.

    @reboot /usr/local/bin/forever start /your/path/to/your/app.js
  4. 파일을 저장하십시오. cron이 설치되었다는 피드백을 받아야합니다.

  5. cron 설치에 대한 추가 확인을 위해 다음을 실행하여 ( “testuser”를 대상 사용자 이름으로 다시 대체) 현재 설치된 크론을 나열하십시오.

    $ crontab -u testuser -l 

내 의견으로는 cron에서 바이너리를 실행할 때 항상 전체 경로를 사용해야한다는 점에 유의하십시오. 또한 영원한 스크립트 경로가 올바르지 않으면 which forever전체 경로를 얻기 위해 실행하십시오 .

해당 forever호출이 주어지면 다음에 node대한 전체 경로를 제공 할 수도 있습니다 node.

@reboot /usr/local/bin/forever start -c /usr/local/bin/node /your/path/to/your/app.js

추가 자료


답변

이를 위해 영구 서비스를 사용할 수 있습니다.

npm install -g forever-service
forever-service install test

이것은 현재 디렉토리에 app.js를 영원히 통해 서비스로 제공합니다. 시스템을 다시 시작할 때마다 서비스가 자동으로 다시 시작됩니다. 또한 중지되면 정상적으로 중지를 시도합니다. 이 스크립트는 logrotate 스크립트도 제공합니다.

깃 허브 URL : https://github.com/zapty/forever-service

참고 : 나는 영원한 서비스의 저자입니다.


답변

  1. NPM을 사용하여 PM2를 전체적으로 설치

    npm install pm2 -g

  2. pm2로 스크립트 시작

    pm2 start app.js

  3. 활성 시작 스크립트 생성

    pm2 startup

    참고 : pm2 시작은 시스템이 재부팅 될 때 PM2를 시작하기위한 것입니다. PM2가 시작되면 시스템이 다운되기 전에 관리했던 모든 프로세스를 다시 시작합니다.

자동 시작을 비활성화하려면 pm2 unstartup을 사용하십시오.

다른 사용자가 시작 스크립트를 실행하려면 -u <username>옵션과--hp <user_home>:


답변

이 경우는 데비안에서 유효합니다.

에 다음을 추가하십시오 /etc/rc.local

/usr/bin/sudo -u {{user}} /usr/local/bin/forever start {{app path}}

  • {{user}} 사용자 이름을 바꿉니다.
  • {{app path}}앱 경로를 대체합니다. 예를 들어/var/www/test/app.js

답변

답변 과이 블로그 게시물에서 영감을 얻은 대체 crontab 방법 .

1. bash 스크립트 파일을 작성하십시오 (bob을 원하는 사용자로 변경하십시오).

vi /home/bob/node_server_init.sh

2. 방금 만든 파일에 복사하여 붙여 넣습니다.

#!/bin/sh

export NODE_ENV=production
export PATH=/usr/local/bin:$PATH
forever start /node/server/path/server.js > /dev/null

설정에 따라 위의 경로를 편집하십시오!

3. bash 스크립트를 실행할 수 있는지 확인하십시오.

chmod 700 /home/bob/node_server_init.sh

4. bash 스크립트를 테스트하십시오.

sh /home/bob/node_server_init.sh

5. “bob”을 노드의 런타임 사용자로 바꾸십시오.

crontab -u bob -e

6. 복사하여 붙여 넣기 (밥을 원하는 사용자로 변경).

@reboot /bin/sh /home/bob/node_server_init.sh

crontab을 저장하십시오.

당신은 그것을 끝냈습니다, 당신의상은 재부팅 (테스트) 🙂


답변

첨부 된 질문 에서 답변을 복사했습니다 .

내장 된로드 밸런서가있는 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]


답변

/etc/init.d 폴더에 쉘 스크립트를 작성해야합니다. init.d 스크립트의 웹에는 많은 정보가 있지만 복잡하지 않습니다.

다음은 CoffeeScript 사이트를 영원히 실행하기 위해 만든 스크립트 샘플입니다.

#!/bin/bash
#
# initd-example      Node init.d
#
# chkconfig: 345
# description: Script to start a coffee script application through forever
# processname: forever/coffeescript/node
# pidfile: /var/run/forever-initd-hectorcorrea.pid
# logfile: /var/run/forever-initd-hectorcorrea.log
#
# Based on a script posted by https://gist.github.com/jinze at https://gist.github.com/3748766
#


# Source function library.
. /lib/lsb/init-functions


pidFile=/var/run/forever-initd-hectorcorrea.pid
logFile=/var/run/forever-initd-hectorcorrea.log

sourceDir=/home/hectorlinux/website
coffeeFile=app.coffee
scriptId=$sourceDir/$coffeeFile


start() {
    echo "Starting $scriptId"

    # This is found in the library referenced at the top of the script
    start_daemon

    # Start our CoffeeScript app through forever
    # Notice that we change the PATH because on reboot
    # the PATH does not include the path to node.
    # Launching forever or coffee with a full path
    # does not work unless we set the PATH.
    cd $sourceDir
    PATH=/usr/local/bin:$PATH
    NODE_ENV=production PORT=80 forever start --pidFile $pidFile -l $logFile -a -d --sourceDir $sourceDir/ -c coffee $coffeeFile

    RETVAL=$?
}

restart() {
    echo -n "Restarting $scriptId"
    /usr/local/bin/forever restart $scriptId
    RETVAL=$?
}

stop() {
    echo -n "Shutting down $scriptId"
    /usr/local/bin/forever stop $scriptId
    RETVAL=$?
}

status() {
    echo -n "Status $scriptId"
    /usr/local/bin/forever list
    RETVAL=$?
}


case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    status)
        status
        ;;
    restart)
        restart
        ;;
    *)
        echo "Usage:  {start|stop|status|restart}"
        exit 1
        ;;
esac
exit $RETVAL

init.d 스크립트가 루트로 실행되었으므로 폴더와 PATH가 루트 사용자에게 명시 적으로 설정되거나 사용 가능한지 확인해야했습니다.