بعد ذلك ، دعنا نرى ما إذا كان بإمكانه تحقيق الهدف إلى الأبد.
1. مقدمة إلى الأبد
Forever هو Daemon Nodejs ضروري بسيط يمكن أن يبدأ وإيقاف وإعادة تشغيل تطبيقات التطبيق. إلى الأبد يعتمد تماما على عمليات سطر الأوامر. تحت عملية Forever ، يتم إنشاء عملية الطفل العقدة ويتم مراقبة عملية Node Child من خلال الشاشة. بمجرد تحديث الملف أو انقضت العملية ، ستعمل تلقائيًا على إعادة تشغيل خادم العقدة لضمان تشغيل التطبيق بشكل طبيعي.
2. التثبيت إلى الأبد
التثبيت العالمي إلى الأبد
نسخة الكود كما يلي:
~ D:/Workspace/JavaScript> تثبيت NPM -g إلى الأبد
D:/toolkit/nodejs/forever -> d:/kyit/nodejs/node_modules/forever/bin/forever
D:/toolkit/nodejs/foreverd -> d:/moodkit/nodejs/node_modules/forever/bin/foreverd
تحقق من المساعدة إلى الأبد
نسخة الكود كما يلي:
~ D:/Workspace/JavaScript> Forever -H
مساعدة: الاستخدام: إلى الأبد [إجراء] [خيارات] البرنامج النصي [خيارات النص]
يساعد:
مساعدة: يراقب البرنامج النصي المحدد في العملية الحالية أو كخفيون
يساعد:
المساعدة: الإجراءات:
مساعدة: ابدأ البرنامج النصي كخفي
مساعدة: توقف توقف عن البرنامج النصي الخفي
المساعدة: توقف توقف كل البرامج النصية إلى الأبد
مساعدة: أعد تشغيل البرنامج النصي الخفي
المساعدة: إعادة تشغيل جميع النصوص التي تعمل إلى الأبد
مساعدة: قائمة قائمة جميع تشغيل البرامج النصية للأبد
مساعدة: تكوين يسرد جميع تكوين المستخدم إلى الأبد
تعليمات: تعيين <key> <Val> تعيين التكوين المحدد إلى الأبد <Ke>
مساعدة: مسح <key> مسح التكوين المحدد إلى الأبد <key>
مساعدة: سجلات سجلات ملفات السجل للجميع عمليات إلى الأبد
مساعدة: سجلات <script | index> tails سجلات <script | index>
مساعدة: الأعمدة إضافة <col> تضيف العمود المحدد إلى الإخراج في "قائمة Forever"
مساعدة: الأعمدة RM <COL> إزالة العمود المحدد من الإخراج في "Forever List"
مساعدة: أعمدة تعيين <Cols> قم بتعيين جميع الأعمدة للإخراج في "قائمة Forever"
المساعدة: Cleanlogs [حذر] يحذف جميع ملفات السجل التاريخية إلى الأبد
يساعد:
المساعدة: الخيارات:
مساعدة: -M Max فقط قم بتشغيل البرنامج النصي المحدد كحد أقصى
مساعدة: -l سجلات تسجيل الدخول إلى الأبد إلى ملفات تسجيل الدخول
مساعدة: -o outfile سجلات stdout من السيناريو الطفل إلى outfile
مساعدة: -e errfile سجلات Stderr من البرنامج النصي للطفل إلى errfile
مساعدة: -P PATH BASE PATH لجميع الملفات ذات الصلة إلى الأبد (ملفات PID ، إلخ)
تعليمات: أمر أمر للتنفيذ (الإعدادات الافتراضية إلى العقدة)
المساعدة: -A ، -سجلات الإلحاح
مساعدة: -F ، -سجلات دفق FIFO إلى stdout
مساعدة: -N ، -عدد عدد خطوط السجل للطباعة
مساعدة: -pidfile ملف PID
مساعدة: -Sourcedir الدليل المصدر الذي يكون البرنامج النصي له بالنسبة إلى
مساعدة: -الحد الأدنى لوقت التشغيل (ميليس) حتى لا يعتبر نصًا "غزلًا"
مساعدة: -وقت الانفصال عن الانتظار (ميليس) بين إطلاق البرنامج النصي الغزل.
المساعدة:-الألوان-لا تُعطل تلوين الإخراج
مساعدة:-الاسم المستعار
مساعدة: -D ، -قوات Debug إلى الأبد لتسجيل ناتج التصحيح
المساعدة: -v ، -يقوم Verbose بتشغيل الرسائل المطول من Forever
مساعدة: -S ، -صامدة قم بتشغيل نص الطفل لإسكات stdout و stderr
مساعدة: -W ، -مشاهدة تغييرات الملفات
مساعدة:-WatchDirectory دليل المستوى الأعلى للمشاهدة من
مساعدة: -Watchignore لتجاهل النمط عند تمكين الساعة (يُسمح بالخيار المتعدد)
مساعدة: -H ، -help أنت تحدق في ذلك
يساعد:
مساعدة: [عملية طويلة على المدى الطويل]
المساعدة: ستستمر عملية Forever في تشغيل رسائل السجل الإخراج إلى وحدة التحكم.
مساعدة: السابقين. إلى الأبد -o out.log -e err.log my-script.js
يساعد:
مساعدة: [Daemon]
المساعدة: سيتم تشغيل عملية Forever كخفي من شأنها أن تجعل العملية المستهدفة تبدأ
مساعدة: في الخلفية. هذا مفيد للغاية لبدء تشغيل Simple Node.js Scripts
مساعدة: دون استخدام nohup. يوصى بتشغيل البدء بـ -O -L ، & -e.
مساعدة: السابقين. ابدأ إلى الأبد -l forever.log -o out.log -e err.log my -daemon.js
المساعدة: أوقف إلى الأبد my-daemon.js
يساعد:
نرى أن إلى الأبد يدعم الكثير من عناصر الأوامر والتكوين ، والتي يجب أن تكون أداة إدارة سطر الأوامر.
3. التفسير الصيني لخط الأوامر إلى الأبد
الإجراءات الفرعية:
نسخة الكود كما يلي:
ابدأ: ابدأ عملية الخفي
توقف: أوقف الخفي
ساقول: توقف عن كل عمليات إلى الأبد
إعادة التشغيل: أعد تشغيل الخفي
إعادة التشغيل: أعد تشغيل جميع العمليات
القائمة: قائمة تعرض عملية إلى الأبد
التكوين: اذكر جميع عناصر تكوين المستخدم
تعيين <Kear> <Val>: تعيين عناصر تكوين المستخدم
مسح <key>: مسح عناصر تكوين المستخدم
السجلات: تسرد سجلات لجميع العمليات إلى الأبد
سجلات <script | index>: إظهار أحدث سجل
الأعمدة إضافة <col>: مقاييس مخصصة إلى قائمة إلى الأبد
الأعمدة rm <col>: قم بإزالة مقياس قائمة Forever Forever
تعيين الأعمدة <Cols>: اضبط جميع المقاييس على قائمة إلى الأبد
Cleanlogs: حذف جميع سجلات تاريخ إلى الأبد
خيارات المعلمة التكوين:
نسخة الكود كما يلي:
-M كحد أقصى: عدد مرات تشغيل البرنامج النصي المحدد
-l logfile: سجل الإخراج إلى سجل السجل
-O Outfile: معلومات وحدة الإخراج إلى Outfile
-e errfile: خطأ في وحدة الإخراج في Errfile
-P PATH: دليل الجذر
-c الأمر: تنفيذ الأمر ، الافتراضي هو العقدة
-أ ، إلحاق: سجلات دمج
-F ، FIFO: إخراج سجل البث
-N ، رقم: عدد خطوط طباعة السجل
Pidfile: ملف PID
Sourcedir: دليل رمز المصدر
Minuptime: الحد الأدنى لوقت التحديث Spinn (MS)
الانكماش: الفاصل الزمني بين اثنين من الدورات
الألوان: تلوين إخراج وحدة التحكم
عادي: الاسم المستعار بدون ألوان ، إخراج وحدة التحكم عديمة اللون
-D ، تصحيح: وضع التصحيح
-V ، مطول: طباعة الإخراج التفصيلي
-S ، صامت: لا تطبع السجلات ورسائل الخطأ
-W ، مشاهدة: شاشة تغيير الملفات
المراقب
Watchignore: تجاهل المراقبة من خلال مطابقة الأنماط
-H ، مساعدة: معلومات مساعدة سطر الأوامر
4. إدارة الخادم إلى الأبد
قم بإنشاء مشروع ويب (Express3+EJS) واستخدم إلى الأبد لإدارة الخادم.
تثبيت Express3
نسخة الكود كما يلي:
~ D:/Workspace/JavaScript> Express -e nodejs -forever
~ d:/workpace/javaScript> cd nodejs-forever && npm تثبيت
ابدأ التطبيق عبر Forever
نسخة الكود كما يلي:
~ D:/Workspace/JavaScript/NodeJS-Forever> ابدأ إلى الأبد app.js
تحذير: -لم يتم تعيين minuptime. التخلف عن: 1000ms
تحذير: -لم يتم تعيين spinsleeptime. سيتم الخروج من البرنامج النصي الخاص بك إذا لم يبقى على الأقل 1000 مللي ثانية
معلومات: ملف معالجة إلى الأبد: app.js
افتح المتصفح: http: // localhost: 3000 ، يمكنك رؤية واجهة الويب
تحقق من حالة الأبد تحت الفوز
نسخة الكود كما يلي:
~ D:/Workspace/JavaScript/NodeJS-Forever> قائمة إلى الأبد
معلومات: لا تعمل العمليات إلى الأبد
~ D:/Workspace/JavaScript/NodeJS-Forever> Forever Stop App.js
خطأ: إلى الأبد لا يمكن العثور على عملية مع الفهرس: app.js
وجدنا أن برنامج Forever كان يعمل خطأ! ! من الواضح أن البرنامج في حالته الجارية ، لكن لا يمكن رؤيته من خلال القائمة. بعد ذلك ، قم بالتبديل إلى Linux Ubuntu واستمر في الاختبار.
5. يدير الخوادم إلى الأبد في أوبونتو
بيئة نظام Linux
Linux: Ubuntu 12.04.2 64bit Server
العقدة: v0.11.2
NPM: 1.2.21
مشروع التهيئة: لم يتم شرح أمر التثبيت
نسخة الكود كما يلي:
~ CD/Home/Conan/Nodejs
~ Express -e nodejs -forever
~ CD Nodejs-Forever && NPM تثبيت
~ sudo npm تثبيت إلى الأبد -g
ابدأ إلى الأبد
انسخ الرمز كما يلي: ~ إلى الأبد app.js
تحذير: -لم يتم تعيين minuptime. التخلف عن: 1000ms
تحذير: -لم يتم تعيين spinsleeptime. سيتم الخروج من البرنامج النصي الخاص بك إذا لم يبقى على الأقل 1000 مللي ثانية
معلومات: ملف معالجة إلى الأبد: app.js
تحقق من حالة خادم العقدة
انسخ الرمز على النحو التالي: ~ قائمة إلى الأبد
معلومات: عمليات التشغيل إلى الأبد
البيانات: برنامج UID Command Script Forever PID Logfile Uptime
البيانات: [0] l2ty/usr/local/bin/node app.js 18276 18279 /home/conan/.forever/l2ty.log 0: 0: 0: 37.792
# عملية النظام
~ ps -aux | Grep Node
تحذير: بناء جملة 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
Conan 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 Node
TCP 0 0 0.0.0.0:3000 0.0.0.0:* استمع 18299/عقدة
أوقف الخادم
انسخ الرمز على النحو التالي: ~ Forever Stop App.js
معلومات: عملية توقف إلى الأبد:
البيانات: برنامج UID Command Script Forever PID Logfile Uptime
[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 Node
كونان 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
~ Kill -9 18299
# انظر إلى عملية العقدة مرة أخرى ، سيتم إعادة تشغيل العقدة تلقائيًا ، PID الجديد = 18324
~ ps -aux | Grep Node
كونان 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
نرى أن قتل عملية العقدة ، إلى الأبد سيساعدنا على إعادة تشغيل العقدة.
اقتل مراقبة إلى الأبد
نسخة الكود كما يلي:
~ Kill -9 18296
~ ps -aux | Grep Node
كونان 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
# اقتل عملية العقدة مرة أخرى
~ Kill -9 18316
~ ps -aux | Grep Node
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 (date date ()) ؛
console.log ('Express Server الاستماع على المنفذ' + app.get ('port')) ؛
}) ؛
setTimeout (function () {
console.log (date date ()) ؛
رمي خطأ جديد ("التطبيق هو خطأ من Inner!") ؛
} ، 10*1000) ؛
ابدأ بأمر Node
انسخ الرمز كما يلي: ~ Node App.js
Thu Sep 26 2013 16:08:44 GMT+0800 (CST)
Express Server الاستماع على المنفذ 3000
Thu Sep 26 2013 16:08:54 GMT+0800 (CST)
/home/conan/nodejs/nodejs-forever/app.js:41
رمي خطأ جديد ("التطبيق هو خطأ من Inner!") ؛
^
خطأ: التطبيق خطأ من Inner!
في null._ontimeout (/home/conan/nodejs/nodejs-forever/app.js:41:9)
في timer.listontimeout [كما Ontimeout] (Timers.JS: 110: 15)
بعد 10 ثوان ، تعلق عملية العقدة بسبب خطأ داخلي.
ابدأ بأمر إلى الأبد
نسخة الكود كما يلي:
~ سجلات MKDIR
~ chmod 777 -r سجلات
~ إلى الأبد. -l ./logs/access.log -e ./logs/error.log start app.js
# تحقق من سجل الخطأ
~ سجلات القط/Access.log ls
Thu Sep 26 2013 16:15:02 GMT+0800 (CST)
Express Server الاستماع على المنفذ 3000
Thu Sep 26 2013 16:15:12 GMT+0800 (CST)
/home/conan/nodejs/nodejs-forever/app.js:41
رمي خطأ جديد ("التطبيق هو خطأ من Inner!") ؛
^
خطأ: التطبيق خطأ من Inner!
في null._ontimeout (/home/conan/nodejs/nodejs-forever/app.js:41:9)
في timer.listontimeout [كما Ontimeout] (Timers.JS: 110: 15)
خطأ: تم اكتشاف البرنامج النصي الذي تم اكتشافه إلى الأبد بالرمز: 8
خطأ: إعادة تشغيل البرنامج النصي إلى الأبد لمرة واحدة
Thu Sep 26 2013 16:15:13 GMT+0800 (CST)
Express Server الاستماع على المنفذ 3000
Thu Sep 26 2013 16:15:23 GMT+0800 (CST)
/home/conan/nodejs/nodejs-forever/app.js:41
رمي خطأ جديد ("التطبيق هو خطأ من Inner!") ؛
^
خطأ: التطبيق خطأ من Inner!
في null._ontimeout (/home/conan/nodejs/nodejs-forever/app.js:41:9)
في timer.listontimeout [كما Ontimeout] (Timers.JS: 110: 15)
خطأ: تم اكتشاف البرنامج النصي الذي تم اكتشافه إلى الأبد بالرمز: 8
خطأ: إعادة تشغيل البرنامج النصي إلى الأبد لوقت 2
Thu Sep 26 2013 16:15:23 GMT+0800 (CST)
Express Server الاستماع على المنفذ 3000
Thu Sep 26 2013 16:15:33 GMT+0800 (CST)
/home/conan/nodejs/nodejs-forever/app.js:41
رمي خطأ جديد ("التطبيق هو خطأ من Inner!") ؛
^
خطأ: التطبيق خطأ من Inner!
في null._ontimeout (/home/conan/nodejs/nodejs-forever/app.js:41:9)
في timer.listontimeout [كما Ontimeout] (Timers.JS: 110: 15)
خطأ: تم اكتشاف البرنامج النصي الذي تم اكتشافه إلى الأبد بالرمز: 8
خطأ: إعادة تشغيل البرنامج النصي إلى الأبد لمدة 3 وقت
Thu Sep 26 2013 16:15:33 GMT+0800 (CST)
Express Server الاستماع على المنفذ 3000
Thu Sep 26 2013 16:15:43 GMT+0800 (CST)
/home/conan/nodejs/nodejs-forever/app.js:41
رمي خطأ جديد ("التطبيق هو خطأ من Inner!") ؛
^
خطأ: التطبيق خطأ من Inner!
في null._ontimeout (/home/conan/nodejs/nodejs-forever/app.js:41:9)
في timer.listontimeout [كما Ontimeout] (Timers.JS: 110: 15)
خطأ: تم اكتشاف البرنامج النصي الذي تم اكتشافه إلى الأبد بالرمز: 8
خطأ: إعادة تشغيل البرنامج النصي إلى الأبد لمدة 4 وقت
لقد وجدنا أنه كل 10 ثوانٍ ، يتم تعليق العقدة ثم يتم إعادة تشغيلها إلى الأبد! !
من خلال القائمة ، يمكننا أيضًا أن نرى أن PID قد تغير عدة مرات.
نسخة الكود كما يلي:
~ قائمة إلى الأبد
معلومات: عمليات التشغيل إلى الأبد
البيانات: برنامج UID Command Script Forever PID Logfile Uptime
البيانات: [0] smtt/usr/local/bin/node app.js 18444 18579 logs/access.log 0: 0: 7: 7.211
~ قائمة إلى الأبد
معلومات: عمليات التشغيل إلى الأبد
البيانات: برنامج UID Command Script Forever PID Logfile Uptime
البيانات: [0] smtt/usr/local/bin/node app.js 18444 18579 logs/access.log 0: 0: 8.921
~ قائمة إلى الأبد
معلومات: عمليات التشغيل إلى الأبد
البيانات: برنامج UID Command Script Forever PID Logfile Uptime
البيانات: [0] smtt/usr/local/bin/node app.js 18444 18604 logs/access.log 0: 0: 0: 0.177
~ قائمة إلى الأبد
معلومات: عمليات التشغيل إلى الأبد
البيانات: برنامج UID Command Script Forever PID Logfile Uptime
البيانات: [0] smtt/usr/local/bin/node app.js 18444 18604 logs/access.log 0: 0: 0: 2.206
وبهذه الطريقة ، يساعدنا Forever إلى إكمال العديد من وظائف إدارة الخادم المهمة: "أمر بدء/إيقاف بسيط" ، "دعم الساخنة النشر" ، "تنزيل إعادة التشغيل" ، و "واجهة المراقبة والسجلات".
بالمقارنة مع إدارة UPSTART ، يتم حذف الخطوات لتكوين البرامج النصية (/ETC/INIT/NODEJS-XX.CONF). يجب استخدام وظائف أخرى خطوة واحدة أقرب إلى المعرفة.
7. تكوين بدء التشغيل لبيئة التطوير وبيئة الإنتاج
بيئة التنمية
نسخة الكود كما يلي:
~ CD/Home/Conan/NodeJS/NodeJS-Forever/
~ إلى الأبد. -l ./logs/access.log -e ./logs/error.log -a -w app
بيئة الإنتاج
انسخ الرمز كما يلي: ~ سجل التصدير =/var/log/nodejs/project
~ تصدير pid =/var/log/nodejs/project/forever.pid
~ تصدير app_path =/home/conan/nodejs/nodejs-forever
~ APPORT 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