次に、永遠に目標を達成できるかどうかを見てみましょう。
1。永遠にはじめに
Foreverは、アプリアプリケーションを起動、停止、再起動できる単純な命令的なNodejsデーモンです。 Foreverは完全にコマンドライン操作に基づいています。永遠のプロセスでは、ノードチャイルドプロセスが作成され、ノードチャイルドプロセスがモニターを介して監視されます。ファイルが更新されるか、プロセスがラップされると、[ノードサーバーを永久に再起動して、アプリケーションが正常に実行されていることを確認します。
2。永遠のインストール
グローバルインストールは永遠に
コードコピーは次のとおりです。
〜d:/workspace/javascript> npmインストール-g永遠に
d:/toolkit/nodejs/forever-> d:/toolkit/nodejs/node_modules/forever/bin/forever
d:/toolkit/nodejs/foreverd-> d:/toolkit/nodejs/node_modules/forever/bin/foreverd
永遠にヘルプをチェックしてください
コードコピーは次のとおりです。
〜d:/workspace/javascript> forever -h
ヘルプ:使用法:永遠に[アクション] [オプション]スクリプト[スクリプトオプション]
ヘルプ:
ヘルプ:現在のプロセスまたはデーモンとして指定されたスクリプトを監視します
ヘルプ:
ヘルプ:アクション:
ヘルプ:デーモンとしてスクリプトを開始します
ヘルプ:デーモンスクリプトを停止します
ヘルプ:Stopallはすべての実行を永遠に停止します
ヘルプ:デーモンスクリプトを再起動します
ヘルプ:再起動して、すべての実行中のすべてのスクリプトを再起動します
ヘルプ:リスト永遠に実行されているすべてのリストをリストします
ヘルプ:config forever foreverユーザー構成をリストします
ヘルプ:SET <Key> <val>指定されたForever Config <Key>を設定します
ヘルプ:Clear <Key>は、指定されたForever Config <Key>をクリアします
ヘルプ:ログは、すべての永遠のプロセスのログファイルをリストします
ヘルプ:logs <script | index> <スクリプト| index>のログをテールします
ヘルプ:列の追加<col>指定された列を「foreverリスト」の出力に追加します
ヘルプ:列rm <col>「foreverリスト」の出力から指定された列を削除しました
ヘルプ:列セット<cols>「foreverリスト」の出力のすべての列を設定します
ヘルプ:CleanLogs [慎重]すべての歴史的な永遠のログファイルを削除します
ヘルプ:
ヘルプ:オプション:
ヘルプ:-m max指定されたスクリプト最大時間のみを実行する
ヘルプ:-l logfile logs forever outputをlogfileにログにします
ヘルプ:-o outfile logs hildscriptからOutfileへのstdouts
ヘルプ:-e errfile logs stderrから子スクリプトへの誤差まで
ヘルプ:-p永遠に関連するすべてのファイル(PIDファイルなど)のパスベースパス
ヘルプ:-cコマンドコマンドを実行する(デフォルトはノードに)
ヘルプ:-a、-Appendのログを追加します
ヘルプ:-f、 - fifoストリームはstdoutにログを記録します
ヘルプ:-n、 - 印刷するログ行の数
ヘルプ:--PIDファイルをパイディングします
ヘルプ:-Sourcedirスクリプトが関連するソースディレクトリ
ヘルプ: - スクリプトが「回転」と見なされないための最小稼働時間(ミリ)
ヘルプ: - スピニングスクリプトの起動の間に待機する時間(ミリ)時間。
ヘルプ: - Colors -No-Colorsは出力の着色を無効にします
ヘルプ: - -Colorsのエイリアスのプレーン
ヘルプ:-d、 - デバッグ出力を記録するために永遠にdebug軍隊
ヘルプ:-v、--verboseは永遠に冗長なメッセージをオンにします
ヘルプ:-s、 - シレントチャイルドスクリプトをサイレンシングstdoutとstderrを実行する
ヘルプ:-W、 - ウォッチファイルの変更を監視します
ヘルプ:-WatchDirectoryから視聴するトップレベルのディレクトリ
ヘルプ: - 時計が有効になったときにパターンを無視するウォッチニャー(複数のオプションが許可されています)
ヘルプ:-H、 - あなたがそれを見つめているのをヘッピングしています
ヘルプ:
ヘルプ:[長期実行プロセス]
ヘルプ:Foreverプロセスは、ログメッセージをコンソールに出力し続けます。
ヘルプ:Ex。 forever -o out.log -e err.log myscript.js
ヘルプ:
ヘルプ:[デーモン]
ヘルプ:Foreverプロセスは、ターゲットプロセスを開始するデーモンとして実行されます
ヘルプ:背景に。これは、リモートの開始SimpleNode.jsスクリプトに非常に便利です
ヘルプ:nohupを使用せずに。 -o -l、&-eで開始することをお勧めします。
ヘルプ:Ex。 Forever Start -l forever.log -o out.log -e err.log my -daemon.js
ヘルプ:My-Daemon.jsを永遠に止めてください
ヘルプ:
私たちは、永遠に多くのコマンドと構成のアイテムをサポートしていることがわかります。これはコマンドライン管理ツールである必要があります。
3。永遠のコマンドラインの中国語の説明
サブコマンドアクション:
コードコピーは次のとおりです。
開始:デーモンプロセスを開始します
停止:デーモンを停止します
Stopall:すべての永遠のプロセスを停止します
再起動:デーモンを再起動します
再起動:すべてのフォーバープロセスを再起動します
リスト:リストForeverプロセスを表示します
構成:すべてのユーザー構成アイテムをリストします
<key> <val>を設定:ユーザー構成アイテムを設定します
clear <key>:ユーザー構成アイテムをクリアします
ログ:永遠にすべてのプロセスのログをリストします
logs <script | index>:最新のログを表示します
列の追加<col>:foreverリストにカスタムメトリックが追加されます
列rm <col>:Foreverリストメトリックを削除します
列セット<cols>:すべてのメトリックをForeverリストに設定します
cleanlogs:すべての永遠の履歴ログを削除します
構成パラメーターオプション:
コードコピーは次のとおりです。
-m max:指定されたスクリプトが実行される回数
-l logfile:logfileへの出力ログ
-o Outfile:Outfileにコンソール情報を出力します
-e errfile:errfileの出力コンソールエラー
-pパス:ルートディレクトリ
-cコマンド:コマンドを実行します。デフォルトはノードです
-a、append:ログをマージします
-F、FIFO:ストリーミングログ出力
-n、number:ログプリント行の数
PIDFILE:PIDファイル
Sourcedir:ソースコードディレクトリ
MINUPTIME:最小スピン更新時間(MS)
Spinsleeptime:2つのスピン間の間隔
色:コンソール出力着色
プレーン:ノーカラーのエイリアス、コンソール出力無色
-D、デバッグ:デバッグモード
-v、verbose:詳細な出力を印刷します
-S、サイレント:ログとエラーメッセージを印刷しないでください
-W、監視:ファイルの変更を監視します
WatchDirectory:トップディレクトリを監視します
Watchignore:パターンマッチングを介して監視を無視します
-H、ヘルプ:コマンドラインヘルプ情報
4。永遠にサーバー管理
Webプロジェクト(Express3+EJS)を作成し、サーバーを管理するために永久に使用します。
Express3をインストールします
コードコピーは次のとおりです。
〜d:/workspace/javascript> express -e nodejs -forever
〜d:/workspace/javascript> cd nodejs-forever && npmインストール
永遠にアプリケーションを開始します
コードコピーは次のとおりです。
〜d:/workspace/javascript/nodejs-forever> forever start app.js
警告: - マイナプタイムが設定されていません。デフォルト:1000ms
警告: - スピンリープムが設定されていません。スクリプトが少なくとも1000msの起き上がらない場合、スクリプトは終了します
情報:永遠に処理ファイル:app.js
ブラウザを開く:http:// localhost:3000、Webインターフェイスを見ることができます
WINで永遠のステータスを確認してください
コードコピーは次のとおりです。
〜d:/workspace/javascript/nodejs-forever> foreverリスト
情報:実行中のプロセスはありません
〜d:/workspace/javascript/nodejs-forever> forever stop app.js
エラー:index:app.jsでプロセスを永遠に見つけることができません
Foreverプログラムが間違っていることがわかりました! !このプログラムは明らかにその実行状態にありますが、リストを通して見ることはできません。次に、Linux ubuntuに切り替えて、テストを続けます。
5。Ubuntuのサーバーを永遠に管理します
Linuxシステム環境
Linux:Ubuntu 12.04.2 64ビットサーバー
ノード:V0.11.2
NPM:1.2.21
初期化プロジェクト:インストールコマンドは説明されていません
コードコピーは次のとおりです。
〜CD/HOME/CONAN/NODEJS
〜Express -e nodejs -forever
〜CD nodejs-forever && npmインストール
〜sudo npmは永遠にインストールされます-g
永遠に始めます
次のようにコードをコピーします
警告: - マイナプタイムが設定されていません。デフォルト:1000ms
警告: - スピンリープムが設定されていません。スクリプトが少なくとも1000msの起き上がらない場合、スクリプトは終了します
情報:永遠に処理ファイル:app.js
ノードサーバーのステータスを確認します
次のようにコードをコピーします。〜foreverリスト
情報:実行中の永遠のプロセス
データ:uidコマンドスクリプト永遠にlogfileアップタイム
データ:[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/ノードを聞いてください
サーバーを停止します
次のようにコードをコピーします
情報:永遠に停止したプロセス:
データ:uidコマンドスクリプト永遠にlogfileアップタイム
[0] l2ty/usr/local/bin/node app.js 18276 18279/home/conan/.forever/l2ty.log 0:0:0:45.621
Linux Ubuntu環境では正常であることがわかります。
6.サーバーのダウンタイムをシミュレートします
2つのテストソリューション:
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
コナン18315 0.0 0.0 13584 956 PTS/5 R+ 15:52 0:00 GREP - COLOR = AUTO NODE
#キルPID = 19299
〜Kill -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
コナン18324 0.0 0.0 13584 956 PTS/5 R+ 15:52 0:00 GREP - COLOR = AUTO NODE
ノードプロセスを殺すことで、ノードを再起動するのに役立つことがわかります。
Forever Monitorを殺します
コードコピーは次のとおりです。
〜殺害-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
コナン18333 0.0 0.0 13584 952 PTS/5 S+ 15:57 0:00 GREP - COLOR = AUTO NODE
#ノードプロセスをもう一度殺します
〜殺害-9 18316
〜ps -aux | grepノード
コナン18336 0.0 0.0 13584 956 PTS/5 S+ 15:58 0:00 GREP - COLOR = AUTO NODE
私たちは永遠のモニターを殺そうとしました。モニタープログラムは自動的に再起動しませんでした。ノードプロセスを殺した後、ノードは自動的に再起動しません。
2)。アプリケーションでは、例外終了をシミュレートします
ファイルの変更:app.js
コードコピーは次のとおりです。
〜vi app.js
// ..
http.createserver(app).listen(app.get( 'port')、function(){{
console.log(new date());
console.log( 'ポートでリスニングするサーバーを聴く' + app.get( 'port'));
});
setimeout(function(){
console.log(new date());
新しいエラーをスローします( 'アプリは内側からのエラーです!');
}、10*1000);
ノードコマンドから始めます
次のようにコードをコピーします。〜Node App.js
2013年9月26日16:08:44 GMT+0800(CST)
ポート3000でリスニングサーバーを聴くエクスプレス
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 ontimeout](timers.js:110:15)
10秒後、内部エラーのためにノードプロセスがハングします。
Foreverコマンドから始めます
コードコピーは次のとおりです。
〜mkdirログ
〜CHMOD 777 -Rログ
〜永遠に-P。 -l ./logs/access.log -e ./logs/error.log start app.js
#エラーログを確認します
〜CATログ/アクセス。logls
2013年9月26日16:15:02 GMT+0800(CST)
ポート3000でリスニングサーバーを聴くエクスプレス
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 ontimeout](timers.js:110:15)
エラー:コードで終了した永遠に検出されたスクリプト:8
エラー:スクリプトを1回再起動します
2013年9月26日16:15:13 GMT+0800(CST)
ポート3000でリスニングサーバーを聴くエクスプレス
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 ontimeout](timers.js:110:15)
エラー:コードで終了した永遠に検出されたスクリプト:8
エラー:スクリプトを2回再起動します
2013年9月26日16:15:23 GMT+0800(CST)
ポート3000でリスニングサーバーを聴くエクスプレス
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 ontimeout](timers.js:110:15)
エラー:コードで終了した永遠に検出されたスクリプト:8
エラー:スクリプトを3回再起動します
2013年9月26日16:15:33 GMT+0800(CST)
ポート3000でリスニングサーバーを聴くエクスプレス
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 ontimeout](timers.js:110:15)
エラー:コードで終了した永遠に検出されたスクリプト:8
エラー:スクリプトを4回再起動します
10秒ごとに、ノードが電話を切ってから永遠に再起動することがわかりました! !
リストを通じて、PIDが何度か変化したこともわかります。
コードコピーは次のとおりです。
〜foreverリスト
情報:実行中の永遠のプロセス
データ:uidコマンドスクリプト永遠にlogfileアップタイム
データ:[0] smtt/usr/local/bin/node app.js 18444 18579 logs/access.log 0:0:0:7.211
〜foreverリスト
情報:実行中の永遠のプロセス
データ:uidコマンドスクリプト永遠にlogfileアップタイム
データ:[0] smtt/usr/local/bin/node app.js 18444 18579 logs/access.log 0:0:0:8.921
〜foreverリスト
情報:実行中の永遠のプロセス
データ:uidコマンドスクリプト永遠にlogfileアップタイム
データ:[0] smtt/usr/local/bin/node app.js 18444 18604 logs/access.log 0:0:0:0.177
〜foreverリスト
情報:実行中の永遠のプロセス
データ:uidコマンドスクリプト永遠にlogfileアップタイム
データ:[0] smtt/usr/local/bin/node app.js 18444 18604 logs/access.log 0:0:0:2.206
このようにして、「Simple Start/Stopコマンド」、「Hot Deploymentをサポート」、「再起動をダウンロード」、「インターフェイスとログの監視」など、いくつかの重要なサーバー管理機能を永遠に完了するのに役立ちます。
Upstart管理と比較して、スクリプト(/etc/init/nodejs-xx.conf)を構成する手順は省略されています。他の機能は、知るために一歩近づく必要があります。
7。開発環境と生産環境の起動構成
開発環境
コードコピーは次のとおりです。
〜CD/home/conan/nodejs/nodejs-forever/
〜永遠に-P。 -l ./logs/access.log -e ./logs/error.log -a -w start app.js
生産環境
次のようにコードをコピーします
〜export pid =/var/log/nodejs/project/forever.pid
〜export app_path =/home/conan/nodejs/nodejs-forever
〜エクスポートapp = $ app_path/app.js
〜forever -p $ app_path -l $ log/access.log -e $ log/error.log -o $ log/out.log -a - pidfile $ pid start $ app