시스템 재시작 시 영원히(노드) 자동 시작
노드의 포에버 모듈을 사용하여 노드 서버를 계속 실행하고 있습니다.그러나 시스템을 다시 시작하면 영원히 종료됩니다.시스템을 다시 시작할 때 노드 서버를 (영원히) 자동으로 시작할 수 있는 방법이 있습니까?
저는 크론탭을 사용하는 것을 제안합니다.사용하기 쉽습니다.
방법
편집을 시작하려면 다음을 실행하여 노드 프로세스에 대해 원하는 런타임 사용자로 "testuser"를 바꿉니다.본인이 아닌 다른 사용자를 선택하면 sudo와 함께 이를 실행해야 합니다.
$ crontab -u testuser -e
이전에 이 작업을 수행한 적이 없는 경우 편집할 편집기를 묻는 메시지가 표시됩니다.저는 vim을 좋아하지만 사용의 편리성을 위해 nano를 추천할 것입니다.
편집기에서 다음 행을 추가합니다.
@reboot /usr/local/bin/forever start /your/path/to/your/app.js
파일을 저장합니다.크론이 설치되었다는 피드백을 받아야 합니다.
cron 설치를 추가로 확인하려면 다음을 실행하여 현재 설치된 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를 서비스로 현재 디렉토리에 영원히 via로 프로비저닝합니다.시스템을 다시 시작할 때마다 서비스가 자동으로 다시 시작됩니다.또한 정지하면 우아한 정지를 시도합니다.이 스크립트는 로그 로테 스크립트도 제공합니다.
Github URL: https://github.com/zapty/forever-service
참고: 저는 영원한 봉사의 저자입니다.
NPM을 사용하여 PM2를 전역적으로 설치
npm install pm2 -g
pm2로 스크립트 시작
pm2 start app.js
활성 시작 스크립트 생성
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
이 답변과 이 블로그 게시물에서 영감을 얻은 대안적인 크론탭 방법.
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. 복사하여 붙여넣기(bob을 원하는 사용자로 변경).
@reboot /bin/sh /home/bob/node_server_init.sh
크론탭을 저장합니다.
끝까지 성공하셨습니다. 상품은 리부트(테스트)입니다. :)
첨부된 질문에서 답변을 복사하였습니다.
로드 밸런서가 내장된 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 스크립트가 root으로 실행되기 때문에 폴더와 PATH가 명시적으로 설정되어 있거나 root 사용자가 사용할 수 있는지 확인해야 했습니다.
PM2 사용
서버 프로덕션 서버를 실행하는 데 가장 적합한 옵션은 무엇입니까?
이런 방식으로 애플리케이션을 실행하면 어떤 이점이 있습니까?
PM2는 응용프로그램이 충돌할 경우 자동으로 재시작됩니다.
PM2는 처리되지 않은 예외의 로그를 /home/safeuser/.pm2/logs/app-err.log의 파일에 보관합니다.
하나의 명령으로 PM2는 서버가 재부팅될 때 자신이 관리하는 모든 응용프로그램이 다시 시작되도록 할 수 있습니다.기본적으로 노드 응용 프로그램은 서비스로 시작됩니다.
ref: https://www.digitalocean.com/community/tutorials/how-to-use-pm2-to-setup-a-node-js-production-environment-on-an-ubuntu-vps
노드 응용프로그램을 서비스로 실행하기 위해 Forever가 만들어지지 않았습니다.올바른 접근 방식은 /etc/inittab 항목(이전 리눅스 시스템) 또는 업스타트(새로운 리눅스 시스템)를 생성하는 것입니다.
다음은 스타트업으로 설정하는 방법에 대한 몇 가지 설명서입니다. https://github.com/cvee/node-upstart
crontab
CentOS x86 6.5에서 작동하지 않습니다. @reboot가 작동하지 않는 것 같습니다.
결국 다음과 같은 해결책을 얻었습니다.
편집: /etc/rc.local
sudo vi /etc/rc.local
이 행을 파일 끝에 추가합니다.eUSER_NAME
그리고.PATH_TO_PROJECT
당신 혼자서요NODE_ENV=production
앱이 프로덕션 모드에서 실행된다는 것을 의미합니다.node.js다를(를) 둘 을 더 할 수 있습니다.
su - USER_NAME -c "NODE_ENV=production /usr/local/bin/forever start /PATH_TO_PROJECT/app.js"
설정하지 않음NODE_ENV
별도의 라인에서, 당신의 앱은 개발 모드에서 계속 실행될 것입니다, 왜냐하면 영원히 다음과 같은 것을 얻을 수 없기 때문입니다.NODE_ENV
.
# WRONG!
su - USER_NAME -c "export NODE_ENV=production"
후 ( vi ()를 .ESC : w q return
서버 재부팅을 시도해 볼 수 있습니다.서버가 재부팅되면 ssh를 통해 원격으로 계정에 로그인하지 않더라도 node.js 앱이 자동으로 실행됩니다.
준비하시는 게 좋을 거예요NODE_ENV
당신의 껍데기 안에 있는 환경.NODE_ENV
때 됩니다.USER_NAME
로그인 합니다.
echo export NODE_ENV=production >> ~/.bash_profile
forever stop/start 와 할 수 ./PATH_TO_PROJECT/app.js
이 ssh를 하지 않고 NODE_ENV
시.
저는 이렇게 하는 대본을 썼습니다.
https://github.com/chovy/node-startup
영원히 시도하지는 않았지만 실행 중인 명령어를 사용자 지정할 수 있으므로 쉽게 사용할 수 있습니다.
/etc/init.d/node-app start
/etc/init.d/node-app restart
/etc/init.d/node-app stop
rc.local의 문제는 명령이 사용자로 로그인하고 sudo를 사용하는 것과는 다른 root으로 액세스된다는 것입니다.
제가 원하는 startup commands etc/profile.d로 .sh 스크립트를 추가하여 이 문제를 해결하였습니다.profile.d에 있는 모든 .sh 파일이 자동으로 로드되고 모든 명령은 일반 sudo를 사용한 것처럼 처리됩니다.
이에 대한 유일한 단점은 지정된 사용자가 로그인을 해야 시작할 수 있다는 것입니다. 제 상황은 항상 그러했습니다.
저는 위의 답변들을 많이 시도했습니다.그들 중 아무도 내게 통하지 않았습니다.제 다에 되어 있습니다./home
루트가 아닌 사용자로서.된 시작 될 때,때,/home
아직 마운트되지 않았으므로 앱이 시작되지 않았습니다.
그리고 Digital Ocean에서 다음과 같은 지침을 찾았습니다.
설명한 대로 PM2를 사용하는 것은 매우 간단하며 완벽하게 작동합니다.가상 서버에서 두 번의 물리적 충돌이 발생했습니다. 다운타임은 1분 정도밖에 되지 않았습니다.
완전 예제 crontab(/etc/crontab 위치)...
#!/bin/bash
# edit this file with .. crontab -u root -e
# view this file with .. crontab -u root -l
# put your path here if it differs
PATH=/root/bin:/root/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
# * * * * * echo "executes once every minute" > /root/deleteme
@reboot cd /root/bible-api-dbt-server; npm run forever;
@reboot cd /root/database-api-server; npm run forever;
@reboot cd /root/mailer-api-server; npm run forever;
저는 다음과 같이 serve & npm을 사용하여 저만의 해결책을 찾았습니다.
- 서비스 패키지 설치:
npm install -g serve
- 그럼 지휘권을 가지세요.
serve -s /var/www/sitename
다시 부팅할 수 있습니다.
이것이 제 VPS에 적합한 것입니다.
셸에서 다음 명령을 사용하여 노드를 영원히 시작할 수 있습니다.
forever app.js //my node script
앱이 실행 중인 서버는 항상 켜져 있어야 한다는 것을 명심해야 합니다.
언급URL : https://stackoverflow.com/questions/13385029/automatically-start-forever-node-on-system-restart
'programing' 카테고리의 다른 글
하위 쿼리는 Windows에서 작동하지 않지만 Linux에서는 작동합니다. (0) | 2023.09.19 |
---|---|
MySQL - Char와 Varchar의 차이점은? (0) | 2023.09.19 |
node.js를 이용한 이미지 업로드, 표시 및 저장 방법 및 표현 방법 (0) | 2023.09.19 |
X, Y, Z 데이터, Excel 또는 기타 도구에서 3D Ploting (0) | 2023.09.19 |
프리드가 EOF에 일찍 도달하는 이유는 무엇입니까? (0) | 2023.09.19 |