다음으로, 영원히 목표를 달성 할 수 있는지 봅시다.
1. 영원히 소개
Forever는 앱 애플리케이션을 시작, 중지 및 다시 시작할 수있는 간단한 명령형 Nodejs 데몬입니다. Forever는 명령 줄 작업을 완전히 기반으로합니다. Forever Process에서는 노드 하위 프로세스가 생성되고 모니터를 통해 노드 하위 프로세스가 모니터링됩니다. 파일이 업데이트되거나 프로세스가 쇄도되면 영원히 응용 프로그램이 정상적으로 실행되도록 노드 서버를 자동으로 다시 시작합니다.
2. 영원히 설치
영원히 글로벌 설치
코드 사본은 다음과 같습니다.
~ d :/workspace/javaScript> npm install -g forever
d :/툴킷/nodejs/forever-> d :/툴킷/nodejs/node_modules/forever/bin/forever
D :/Toolkit/Nodejs/Foreverd-> D :/Toolkit/Nodejs/Node_Modules/Forever/Bin/Foreverd
영원히 도움을 확인하십시오
코드 사본은 다음과 같습니다.
~ d :/workspace/javaScript> forever -h
도움말 : 사용법 : Forever [Action] [옵션] 스크립트 [스크립트-옵션]
돕다:
도움말 : 현재 프로세스 또는 데몬으로 지정된 스크립트를 모니터링합니다.
돕다:
도움말 : 행동 :
도움말 : 데몬으로 스크립트를 시작하십시오
도움말 : 데몬 스크립트를 중지하십시오
도움말 : stopall은 모두 영원히 실행 중입니다
도움말 : 복귀 다시 시작 데몬 스크립트를 다시 시작하십시오
도움말 : 재시작 된 모든 실행 영원한 스크립트를 다시 시작합니다
도움말 : 모든 실행 영원히 스크립트를 목록에 나열하십시오
도움말 : config는 모든 영원한 사용자 구성을 나열합니다
도움말 : <key> <val> 지정된 영원한 구성 <key> 설정
도움말 : Clear <key>는 지정된 Forever Config <key>를 지우 셨습니다
도움말 : 로그는 모든 영원한 프로세스에 대한 로그 파일을 나열합니다
도움말 : logs <script | index>는 <script | index>의 로그를 꼬리입니다
도움말 : 열 ADD <COL> 지정된 열을`Forever List '의 출력에 추가합니다.
도움말 : 열 rm <col>`Forever List '의 출력에서 지정된 열을 제거했습니다.
도움말 : 열 설정 <cols>`Forever List '에서 출력에 대한 모든 열을 설정합니다.
도움말 : Cleanlogs [Cerful] 모든 역사적 영원한 로그 파일을 삭제합니다
돕다:
도움말 : 옵션 :
도움말 : -M Max는 지정된 스크립트 최대 스크립트 만 실행합니다.
도움말 : -l 로그 파일 로그 로그 파일로 영원히 출력합니다
도움말 : -o Outfile Logs Child Script에서 Outfile까지 stdout
도움말 : -e errfile logs stderr with child script에서 errfile
도움말 : -P 경로 기본 경로 모든 영원한 관련 파일 (PID 파일 등)
도움말 : -C execute (기본값으로 노드) 명령 명령
도움말 : -a, -로그를 부속합니다
도움말 : -f, -fifo 스트림 로그가 stdout에
도움말 : -n, -인쇄 할 로그 라인 수
도움말 : -pidfile PID 파일
도움말 : -sourcedir 스크립트가있는 소스 디렉토리
도움말 : -스크립트가 "회전"으로 간주되지 않도록 MILLIS (Minuptime 최소 가동 시간)
도움말 : -스피닝 스크립트의 시작 사이에 대기 시간 (Millis) 시간 시간.
도움말 :-색상-색상은 출력 색칠을 비활성화합니다
도움말 :--색상의 별칭
도움말 : -D, -Debug Forces는 영원히 디버그 출력을 기록합니다
도움말 : -v, -verbose는 영원히 장방 메시지를 켭니다.
도움말 : -s, -실질적 실행 Child Script silencing stdout and stderr
도움말 : -w, -파일 변경을 감시합니다
도움말 : -WatchDirectory 최상위 디렉토리에서 볼 수 있습니다
도움말 : -시계가 활성화 될 때 패턴을 무시하는 watchignore (여러 옵션이 허용됨)
도움말 : -h, -당신은 그것을 쳐다보고 있습니다
돕다:
도움말 : [장기 과정]
도움말 : 영원히 프로세스는 로그 메시지를 콘솔로 계속 출력합니다.
도움말 : 예. Forever -o out.log -e err.log my -script.js
돕다:
도움말 : [데몬]
도움말 : 영원히 프로세스는 대상 프로세스를 시작하게하는 데몬으로 실행됩니다.
도움말 : 백그라운드에서. 원격 시작 간단한 node.js 스크립트에 매우 유용합니다.
도움말 : nohup을 사용하지 않고. -o -l, & -e로 시작하는 것이 좋습니다.
도움말 : 예. Forever start -l forever.log -o out.log -e err.log my -daemon.js
도움말 : 영원히 My-daemon.js를 중지합니다
돕다:
우리는 영원히 명령 줄 관리 도구 여야하는 많은 명령 및 구성 항목을 영원히 지원한다고 생각합니다.
3. 영원한 명령 줄에 대한 중국어 설명
하위 명령 조치 :
코드 사본은 다음과 같습니다.
시작 : 데몬 프로세스를 시작하십시오
중지 : 데몬을 중지하십시오
Stopall : 모든 영원한 프로세스를 중지하십시오
다시 시작 : 데몬을 다시 시작하십시오
재시작 : 모든 FOEVER 프로세스를 다시 시작하십시오
목록 : 목록은 영원히 프로세스를 표시합니다
구성 : 모든 사용자 구성 항목을 나열합니다
<key> <val>을 설정하십시오 : 사용자 구성 항목을 설정하십시오
CLEAR <키> : 사용자 구성 항목을 지우십시오
로그 : 모든 영원한 프로세스에 대한 로그를 나열합니다
로그 <스크립트 | 색인> : 최신 로그를 표시합니다
열은 <col>을 추가합니다 : 영원히 목록에 맞춤형 메트릭
열 rm <col> : Forever List Metric을 제거하십시오
열 설정 <cols> : 모든 메트릭을 영원히 목록으로 설정하십시오
클리닝 로그 : 모든 영원한 역사 로그를 삭제하십시오
구성 매개 변수 옵션 :
코드 사본은 다음과 같습니다.
-M MAX : 지정된 스크립트가 실행되는 횟수
-L 로그 파일 : 로그 파일로의 출력 로그
-o Outfile : 출력 콘솔 정보는 Outfile입니다
-e errfile : errfile의 출력 콘솔 오류
-P 경로 : 루트 디렉토리
-C 명령 : 명령을 실행하면 기본값은 노드입니다
-A, Append : 병합 로그
-f, fifo : 스트리밍 로그 출력
-n, 숫자 : 로그 인쇄 라인 수
pidfile : PID 파일
Sourcedir : 소스 코드 디렉토리
Minuptime : 최소 Spinn 업데이트 시간 (MS)
Spinsleeptime : 두 스핀 사이의 간격
색상 : 콘솔 출력 색칠
평원 : 색상 별명, 콘솔 출력 무색
-D, 디버그 : 디버그 모드
-V, Verbose : 상세한 출력을 인쇄합니다
-S, Silent : 로그 및 오류 메시지를 인쇄하지 마십시오
-W, 시계 : 파일 변경 모니터
WatchDirectory : 상단 디렉토리를 모니터링하십시오
Watchignore : 패턴 매칭을 통해 모니터링을 무시하십시오
-H, 도움말 : 명령 줄 도움말 정보
4. 영원히 서버 관리
웹 프로젝트 (Express3+EJS)를 만들고 서버를 영원히 사용하십시오.
Express3를 설치하십시오
코드 사본은 다음과 같습니다.
~ d :/workspace/javaScript> express -e nodejs -prorever
~ d :/workspace/javaScript> cd nodejs-prorever && npm 설치
영원히 신청서를 시작하십시오
코드 사본은 다음과 같습니다.
~ d :/workspace/javaScript/nodejs-forever> 영원히 시작 app.js
경고 : -미지업 시간이 설정되지 않았습니다. 불이행 : 1000ms
경고 : -spinsleeptime이 설정되지 않았습니다. 스크립트가 최소 1000m 이상으로 유지되지 않으면 스크립트가 종료됩니다.
정보 : 영원히 처리 파일 : App.js
브라우저 열기 : http : // localhost : 3000, 웹 인터페이스를 볼 수 있습니다.
승리하에 영원히 지위를 확인하십시오
코드 사본은 다음과 같습니다.
~ d :/workspace/javaScript/nodejs-prorever> Forever List
정보 : 영원히 진행되지 않습니다
~ d :/workspace/javaScript/nodejs-forever> 영원히 app.js를 정지시킵니다
오류 : Index : App.js를 사용하여 Forever는 프로세스를 찾을 수 없습니다
우리는 영원히 프로그램이 잘못되고 있음을 발견했습니다! ! 이 프로그램은 분명히 실행중인 상태이지만 목록을 통해 볼 수는 없습니다. 다음으로 Linux Ubuntu로 전환하여 테스트를 계속하십시오.
5. 영원히 우분투에서 서버를 관리합니다
리눅스 시스템 환경
Linux : Ubuntu 12.04.2 64 비트 서버
노드 : v0.11.2
NPM : 1.2.21
초기화 프로젝트 : 설치 명령은 설명되지 않습니다
코드 사본은 다음과 같습니다.
~ CD/HOME/CONAN/NODEJS
~ express -e nodejs -forever
~ cd nodejs-prorever && npm 설치
~ Sudo npm Install Forever -g
영원히 시작하십시오
다음과 같이 코드를 복사하십시오. ~ Forever Start App.js
경고 : -미지업 시간이 설정되지 않았습니다. 불이행 : 1000ms
경고 : -spinsleeptime이 설정되지 않았습니다. 스크립트가 최소 1000m 이상으로 유지되지 않으면 스크립트가 종료됩니다.
정보 : 영원히 처리 파일 : App.js
노드 서버 상태를 확인하십시오
다음과 같이 코드를 복사하십시오. ~ Forever List
정보 : 영원히 진행됩니다
데이터 : UID 명령 스크립트 Forever PID Logfile Upime
데이터 : [0] l2ty/usr/local/bin/node app.js 18276 18279 /home/conan/.forever/l2ty.log 0 : 0 : 0 : 37.792
# 시스템 프로세스
~ ps -aux | grep 노드
경고 : 나쁜 PS 구문, 아마도 가짜 '-'? '? http://procps.sf.net/faq.html을 참조하십시오
코난 18296 0.5 1.1 597696 23776? SSL 15:48 0:00/usr/local/bin/node/usr/local/lib/node_modules/forever/bin/monitor app.js
코난 18299 0.4 0.8 630340 18392? SL 15:48 0:00/usr/local/bin/node /home/conan/nodejs/nodejs-forever/app.js
# 포트 점령
~ netstat -nltp | grep 노드
TCP 0 0 0.0.0.0:3000 0.0.0.0:* 18299/노드를 듣습니다
서버를 중지하십시오
다음과 같이 코드를 복사하십시오. ~ Forever Stop App.js
정보 : 영원히 중지 프로세스 :
데이터 : UID 명령 스크립트 Forever PID Logfile Upime
[0] l2ty/usr/local/bin/node app.js 18276 18279 /home/conan/.forever/l2ty.log 0 : 0 : 0 : 45.621
우리는 그것이 Linux Ubuntu 환경에서 정상임을 알 수 있습니다.
6. 서버 다운 타임 시뮬레이션
두 가지 테스트 솔루션 :
1. Linux 명령을 사용하여 노드 프로세스를 직접 죽입니다.
2. 응용 프로그램에서 예외 종료를 시뮬레이션하십시오
1). Linux 명령을 사용하여 노드 프로세스를 직접 제거하십시오
코드 사본은 다음과 같습니다.
# 노드 프로세스를 확인하십시오. PID = 18299
~ ps -aux | grep 노드
코난 18296 0.0 1.1 597696 23776? SSL 15:48 0:00/usr/local/bin/node/usr/local/lib/node_modules/forever/bin/monitor app.js
코난 18299 0.0 0.8 630340 18392? SL 15:48 0:00/usr/local/bin/node /home/conan/nodejs/nodejs-forever/app.js
CONAN 18315 0.0 0.0 13584 956 PTS/5 R+ 15:52 0:00 GREP --COLOR = AUTO NODE
# 킬 pid = 19299
~ 살인 -9 18299
# 노드 프로세스를 다시 보면 노드가 자동으로 다시 시작됩니다. 새 PID = 18324
~ ps -aux | grep 노드
코난 18296 0.0 1.1 597696 23916? SSL 15:48 0:00/usr/local/bin/node/usr/local/lib/node_modules/forever/bin/monitor app.js
코난 18316 2.6 0.8 630340 18412? SL 15:52 0:00/usr/local/bin/node /home/conan/nodejs/nodejs-forever/app.js
Conan 18324 0.0 0.0 13584 956 PTS/5 R+ 15:52 0:00 GREP --COLOR = AUTO NODE
우리는 노드 프로세스를 죽이는 것이 영원히 노드를 다시 시작하는 데 도움이 될 것임을 알 수 있습니다.
영원히 모니터를 처치하십시오
코드 사본은 다음과 같습니다.
~ 살인 -9 18296
~ ps -aux | grep 노드
코난 18316 0.0 0.9 630340 18644? SL 15:52 0:00/usr/local/bin/node /home/conan/nodejs/nodejs-forever/app.js
Conan 18333 0.0 0.0 13584 952 PTS/5 S+ 15:57 0:00 GREP --COLOR = AUTO NODE
# 노드 프로세스를 다시 죽입니다
~ 살인 -9 18316
~ ps -aux | grep 노드
Conan 18336 0.0 0.0 13584 956 PTS/5 S+ 15:58 0:00 GREP --COLOR = AUTO NODE
우리는 Forever의 모니터를 죽이려고했습니다. 모니터 프로그램이 자동으로 다시 시작되지 않았습니다. 노드 프로세스를 죽인 후에는 노드가 자동으로 다시 시작되지 않습니다.
2). 응용 프로그램에서 예외 종료를 시뮬레이션하십시오
파일 수정 : app.js
코드 사본은 다음과 같습니다.
~ vi app.js
// ..
http.createserver (app) .listen (app.get ( 'port'), function () {
Console.log (새 날짜 ());
Console.log ( 'Port에서 Express Server 청취' + app.get ( 'port'));
});
settimeout (function () {
Console.log (새 날짜 ());
새 오류를 던지십시오 ( '앱은 내부에서 오류입니다!');
}, 10*1000);
노드 명령으로 시작하십시오
다음과 같이 코드를 복사하십시오. ~ Node app.js
Thu 2013 년 9 월 26 일 16:08:44 GMT+0800 (CST)
포트 3000에서 서버 청취를 특징으로하십시오
Thu 2013 년 9 월 26 일 16:08:54 GMT+0800 (CST)
/home/conan/nodejs/nodejs-forever/app.js:41
새 오류를 던지십시오 ( '앱은 내부에서 오류입니다!');
^
오류 : 앱은 내부의 오류입니다!
at null._ontimeout (/home/conan/nodejs/nodejs-forever/app.js:41:9)
at timer.listontimeout [as as ontimeout] (Timers.js : 110 : 15)
10 초 후에는 내부 오류로 인해 노드 프로세스가 중단됩니다.
영원히 명령으로 시작하십시오
코드 사본은 다음과 같습니다.
~ mkdir 로그
~ CHMOD 777 -R 로그
~ 영원히 -P. -l ./logs/access.log -e ./logs/error.log start app.js
# 오류 로그를 확인하십시오
~ CAT LOGS/ACCESS.LOG LS
Thu 2013 년 9 월 26 일 16:15:02 GMT+0800 (CST)
포트 3000에서 서버 청취를 특징으로하십시오
Thu 2013 년 9 월 26 일 16:15:12 GMT+0800 (CST)
/home/conan/nodejs/nodejs-forever/app.js:41
새 오류를 던지십시오 ( '앱은 내부에서 오류입니다!');
^
오류 : 앱은 내부의 오류입니다!
at null._ontimeout (/home/conan/nodejs/nodejs-forever/app.js:41:9)
at timer.listontimeout [as as ontimeout] (Timers.js : 110 : 15)
오류 : 코드로 종료 된 영원히 감지 된 스크립트 : 8
오류 : 스크립트를 1 회 영원히 다시 시작합니다
Thu 2013 년 9 월 26 일 16:15:13 GMT+0800 (CST)
포트 3000에서 서버 청취를 특징으로하십시오
Thu 2013 년 9 월 26 일 16:15:23 GMT+0800 (CST)
/home/conan/nodejs/nodejs-forever/app.js:41
새 오류를 던지십시오 ( '앱은 내부에서 오류입니다!');
^
오류 : 앱은 내부의 오류입니다!
at null._ontimeout (/home/conan/nodejs/nodejs-forever/app.js:41:9)
at timer.listontimeout [as as ontimeout] (Timers.js : 110 : 15)
오류 : 코드로 종료 된 영원히 감지 된 스크립트 : 8
오류 : 스크립트가 2 회 영원히 다시 시작됩니다
Thu 2013 년 9 월 26 일 16:15:23 GMT+0800 (CST)
포트 3000에서 서버 청취를 특징으로하십시오
Thu 2013 년 9 월 26 일 16:15:33 GMT+0800 (CST)
/home/conan/nodejs/nodejs-forever/app.js:41
새 오류를 던지십시오 ( '앱은 내부에서 오류입니다!');
^
오류 : 앱은 내부의 오류입니다!
at null._ontimeout (/home/conan/nodejs/nodejs-forever/app.js:41:9)
at timer.listontimeout [as as ontimeout] (Timers.js : 110 : 15)
오류 : 코드로 종료 된 영원히 감지 된 스크립트 : 8
오류 : 3 회 스크립트를 영원히 다시 시작합니다
Thu 2013 년 9 월 26 일 16:15:33 GMT+0800 (CST)
포트 3000에서 서버 청취를 특징으로하십시오
Thu 2013 년 9 월 26 일 16:15:43 GMT+0800 (CST)
/home/conan/nodejs/nodejs-forever/app.js:41
새 오류를 던지십시오 ( '앱은 내부에서 오류입니다!');
^
오류 : 앱은 내부의 오류입니다!
at null._ontimeout (/home/conan/nodejs/nodejs-forever/app.js:41:9)
at timer.listontimeout [as as ontimeout] (Timers.js : 110 : 15)
오류 : 코드로 종료 된 영원히 감지 된 스크립트 : 8
오류 : 4 번 동안 스크립트를 영원히 다시 시작합니다
우리는 10 초마다 노드가 끊어지고 영원히 다시 시작된다는 것을 발견했습니다! !
목록을 통해 PID가 여러 번 변경되었음을 알 수 있습니다.
코드 사본은 다음과 같습니다.
~ 영원히 목록
정보 : 영원히 진행됩니다
데이터 : UID 명령 스크립트 Forever PID Logfile Upime
데이터 : [0] smtt/usr/local/bin/node app.js 18444 18579 logs/access.log 0 : 0 : 0 : 7.211
~ 영원히 목록
정보 : 영원히 진행됩니다
데이터 : UID 명령 스크립트 Forever PID Logfile Upime
데이터 : [0] smtt/usr/local/bin/node app.js 18444 18579 logs/access.log 0 : 0 : 0 : 8.921
~ 영원히 목록
정보 : 영원히 진행됩니다
데이터 : UID 명령 스크립트 Forever PID Logfile Upime
데이터 : [0] smtt/usr/local/bin/node app.js 18444 18604 logs/access.log 0 : 0 : 0 : 0.177
~ 영원히 목록
정보 : 영원히 진행됩니다
데이터 : UID 명령 스크립트 Forever PID Logfile Upime
데이터 : [0] smtt/usr/local/bin/node app.js 18444 18604 logs/access.log 0 : 0 : 0 : 2.206
이러한 방식으로 영원히 "Simple Start/STEP 명령", "HOT DEPLOYMENT 지원", "다운로드 재시작"및 "모니터링 인터페이스 및 로그"의 몇 가지 중요한 서버 관리 기능을 완료하는 데 도움이됩니다.
신생 관리와 비교하여 스크립트를 구성하는 단계 (/etc/init/nodejs-xx.conf)는 생략됩니다. 다른 기능은 한 걸음 더 가까이 알아야합니다.
7. 개발 환경 및 생산 환경의 시작 구성
개발 환경
코드 사본은 다음과 같습니다.
~ CD/HOME/CONAN/NODEJS/NODEJS-PREVER/
~ 영원히 -P. -l ./logs/access.log -e ./logs/error.log -a -w start app.js
생산 환경
다음과 같이 코드를 복사하십시오. ~ 내보내기 로그 =/var/log/nodejs/project
~ 내보내기 pid =/var/log/nodejs/project/forever.pid
~ export app_path =/home/conan/nodejs/nodejs-prorever
~ 내보내기 앱 = $ app_path/app.js
~ 영원히 -p $ app_path -l $ log/access.log -e $ log/error.log -o $ log/out.log -a ---pidfile $ pid start $ app