NSSM هو برنامج مساعد خدمة يشبه SRVANY و CYGRUNSRV. يمكن أن يبدأ أي تطبيق (مثل وحدة التحكم) كخدمة NT وسيقوم بإعادة تشغيل الخدمة إذا فشلت لأي سبب.
يحتوي NSSM أيضًا على تثبيت خدمة رسومية ومزيل.
هذا شوكة NSSM
الملفات الثنائية التي يمكنك العثور عليها في الإصدارات هنا
الكود الأصلي: https://git.nssm.cc/nssm/nssm بواسطة Iain Patterson
الوثائق: الاستخدام ، الأوامر
في ملاحظات الاستخدام أدناه ، يمكن كتابة الحجج إلى البرنامج بين قوسين الزاوية و/أو قوسين مربع. يعني أنه يجب عليك إدراج السلسلة المناسبة و [] تعني أن السلسلة اختيارية. انظر الأمثلة أدناه ...
لاحظ أنه في كل مكان ، يمكنك استبدال اسم عرض الخدمة.
لتثبيت خدمة ، قم بتشغيل
nssm install <servicename>
سيُطلب منك إدخال المسار الكامل للتطبيق الذي ترغب في تشغيله وأي خيارات سطر الأوامر لتمريرها إلى هذا التطبيق.
استخدم مدير خدمة النظام (Services.MSC) للتحكم في خصائص الخدمة المتقدمة مثل طريقة بدء التشغيل وتفاعل سطح المكتب. قد تدعم NSSM هذه الخيارات في وقت لاحق ...
لتثبيت خدمة ، قم بتشغيل
nssm install <servicename> <application> [<options>]
سيحاول NSSM بعد ذلك تثبيت خدمة تقوم بتشغيل التطبيق المسماة مع الخيارات المحددة (إذا حددت أي).
لا تنسَ إرفاق المسارات في "اقتباسات" إذا كانت تحتوي على مساحات!
إذا كنت ترغب في تضمين عروض أسعار في الخيارات ، فستحتاج إلى "" "اقتباس" "" الاقتباسات ".
ستقوم NSSM بتشغيل التطبيق المدرج في السجل عند إرسال إشارة بداية وسوف ينهيها عند إرسال إشارة إيقاف. حتى الآن ، مثل سرفياني. لكن NSSM هو مدير الخدمة غير المصاب ويمكنه اتخاذ إجراء إذا/عند وفاة التطبيق.
مع عدم وجود تكوين منك ، ستحاول NSSM إعادة تشغيل نفسها إذا لاحظت أن التطبيق مات لكنك لم ترسل إشارة توقف. سوف تستمر NSSM في المحاولة ، والتوقف بين كل محاولة ، حتى تبدأ الخدمة بنجاح أو ترسلها إشارة توقف.
سوف يتوقف NSSM عن وقت أطول بشكل متزايد بين محاولات إعادة التشغيل اللاحقة إذا فشلت الخدمة في البدء في الوقت المناسب ، بحد أقصى أربع دقائق. هذا لذلك لا يستهلك كمية مفرطة من وقت وحدة المعالجة المركزية في محاولة لبدء تطبيق فاشل مرارًا وتكرارًا. إذا قمت بتحديد سبب الفشل ولا ترغب في الانتظار ، يمكنك استخدام وحدة التحكم في خدمة Windows (حيث سيتم عرض الخدمة في حالة توقف مؤقت) لإرسال إشارة متابعة إلى NSSM وسيتم إعادة المحاولة في غضون بضع ثوان.
بشكل افتراضي ، يعرّف NSSM "طريقة في الوقت المناسب" أن يكون في غضون 1500 ميلي ثانية. يمكنك تغيير العتبة للخدمة عن طريق تعيين عدد المللي ثانية كقيمة REG_DWORD في السجل في HKLM SYSTEM CurrentControlset Services <Service> Parameters Appthrottle.
بدلاً من ذلك ، يمكن أن تتوقف NSSM عن وقت قابل للتكوين قبل محاولة إعادة تشغيل التطبيق حتى لو تم تشغيله بنجاح لمقدار الوقت المحدد بواسطة Appthrottle. سوف تستشير NSSM قيمة REG_DWORD في HKLM SYSTEM CurrentControlset Services <ervice> Parameters AsspresTartDelay لعدد المللي ثانية للانتظار قبل محاولة إعادة التشغيل. إذا تم تعيين AsspresTartDelay وتم تحديد التطبيق على أنه يخضع لخداع ، فإن NSSM ستعمل على إيقاف الخدمة لأيهما أطول من تأخير إعادة التشغيل المكوّن وفترة الخانق المحسوبة.
إذا كان AspresTartDelay مفقودًا أو غير صالح ، فسيتم تطبيق اختناق فقط.
سيبحث NSSM في السجل ضمن HKLM System CurrentControlset Services <Service> Parameters appexit لقيم السلسلة (reg_expand_sz) المقابلة لرمز الخروج من التطبيق. إذا تم الخروج من التطبيق بالرمز 1 ، على سبيل المثال ، سيبحث NSSM عن قيمة سلسلة ضمن Appexit تسمى "1" أو ، إذا لم يجدها ، فسوف يعود إلى القيمة الافتراضية (الافتراضية). يمكنك معرفة رمز الخروج للتطبيق من خلال استشارة سجل حدث النظام. سيقوم NSSM بتسجيل رمز الخروج عند خروج التطبيق.
استنادًا إلى البيانات الموجودة في السجل ، ستتخذ NSSM أحد الإجراءات الثلاثة:
إذا كانت بيانات القيمة "إعادة تشغيل" NSSM ستحاول إعادة تشغيل التطبيق كما هو موضح أعلاه. هذا هو سلوكه الافتراضي.
إذا كانت بيانات القيمة "تجاهل" NSSM ، فلن تحاول إعادة تشغيل التطبيق ولكنها ستستمر في تشغيل نفسه. هذا يحاكي السلوك (غير المرغوب فيه عادة) من Srvany. ستعرض وحدة التحكم في Windows Services الخدمة على أنها لا تزال قيد التشغيل على الرغم من خروج التطبيق.
إذا كانت بيانات القيمة "مخرج" ، فسيخرج NSSM بأمان. ستعرض وحدة التحكم في خدمات Windows الخدمة كما توقف. إذا كنت ترغب في توفير التحكم الدقيق في استرداد الخدمة ، فيجب عليك استخدام هذا الرمز وتحرير إجراء الفشل يدويًا. يرجى ملاحظة أن إصدارات Windows قبل Vista لن تعتبر مثل هذا الخروج بمثابة فشل. في الإصدارات القديمة من Windows ، يجب عليك استخدام "الانتحار" بدلاً من ذلك.
إذا كانت بيانات القيمة هي "الانتحار" ، فسيقوم NSSM بمحاكاة التعطل والخروج دون إبلاغ مدير الخدمة. يجب استخدام هذا الخيار فقط لأنظمة ما قبل Vista حيث ترغب في تطبيق إجراء استرداد الخدمة. لاحظ أنه في حالة خروج التطبيق الذي تم مراقبه بالرمز 0 ، فإن NSSM ستكرم فقط طلبًا للانتحار إذا قمت بتكوين مفتاح تسجيل بشكل صريح لرمز الخروج 0. إذا تم تعيين الإجراء الافتراضي فقط على الانتحار ، فستخرج NSSM بأمان.
يمكن لـ NSSM تعيين فئة الأولوية للتطبيق المدارة. ستنظر NSSM في السجل ضمن HKLM System CurrentControlset Services <Service> Parameters لإدخال reg_dword. تتوافق القيم الصالحة مع وسيطات setPriorityClass (). إذا كان AppPriority () مفقودًا أو غير صالح ، فسيتم إطلاق التطبيق بأولوية عادية.
يمكن لـ NSSM تعيين تقارب وحدة المعالجة المركزية للتطبيق المدارة. ستنظر NSSM في السجل ضمن HKLM System CurrentControlset Services <ervice> Parameters for REG_SZ Entry Appaffinity. يجب أن تحدد قائمة مفصولة مفصولة بمعرفات المعالجات التي يتم فحصها صفريًا. قد يتم تحديد مجموعة من المعالجات اختياريا مع اندفاعة. لا يُسمح بأي شخصيات أخرى في السلسلة.
على سبيل المثال ، لتحديد الأول ؛ ثانية؛ وحدات المعالجة المركزية الثالثة والخامسة ، سيكون التطبيق المناسب 0-2،4.
إذا كان Appaffinity مفقودًا أو غير صالح ، فلن يحاول NSSM تقييد التطبيق على وحدات المعالجة المركزية المحددة.
لاحظ أن الإصدار 64 بت من NSSM يمكنه تكوين 64 وحدة المعالجة المركزية كحد أقصى بهذه الطريقة وأن الإصدار 32 بت يمكنه تكوين ماكسيوم من 32 وحدة المعالجة المركزية حتى عند التشغيل على النوافذ 64 بت.
عند إيقاف الخدمة ، سيحاول NSSM عدة طرق مختلفة لقتل التطبيق المراقب ، يمكن تعطيل كل منها إذا لزم الأمر.
ستحاول First NSSM إنشاء حدث Control-C وإرساله إلى وحدة تحكم التطبيق. قد تعترض البرامج النصية الدُفعات أو تطبيقات وحدة التحكم الحدث وإغلاق نفسها بأمان. تطبيقات واجهة المستخدم الرسومية لا تحتوي على لوحات مفاتيح ولن تستجيب لهذه الطريقة.
ثانياً ، ستعمل NSSM على تعداد جميع النوافذ التي تم إنشاؤها بواسطة التطبيق وإرسال رسالة WM_Close ، تطلب مخرجًا رشيقًا.
ثالثًا ، ستعمل NSSM على تعداد جميع مؤشرات الترابط التي تم إنشاؤها بواسطة التطبيق وإرسال رسالة WM_QUIT لهم ، تطلب مخرجًا رشيقًا. ليس كل مؤشرات ترابط التطبيقات لديها قوائم قوائم رسائل ؛ أولئك الذين لا يستجيبون لهذه الطريقة.
أخيرًا ، سيقوم NSSM باستدعاء TerminateProcess () لطلب نظام التشغيل تنهي التطبيق بالقوة. لا يمكن احتجاز أو تجاهل TerminateProcess () ، لذلك في معظم الحالات ، سيتم قتل التطبيق. ومع ذلك ، ليس هناك ما يضمن أنه سيكون لديه فرصة لأداء أي عمليات ترتيب قبل خروجها.
قد يتم تعطيل أي أو كل الطرق المذكورة أعلاه. سوف يبحث NSSM عن قيمة التسجيل HKLM System CurrentControlset Services <ervice> Parameters AppStopMethodSkip التي يجب أن تكون من نوع الكلمات Reg_dword على حقل صغير يصف الطرق التي لا ينبغي تطبيقها.
إذا كان AppStopMethodskip يتضمن 1 ، فلن يتم إنشاء أحداث Control-C. إذا كان AppStopMethodskip يتضمن 2 ، فلن يتم نشر رسائل WM_Close. إذا كان AppStopMethodskip يتضمن 4 ، فلن يتم نشر رسائل WM_Quit. إذا كان AppStopMethodskip يتضمن 8 ، فلن يتم استدعاء TerminateProcess ().
على سبيل المثال ، إذا كنت تعرف أن التطبيق لم يستجب لأحداث Control-C ولم يكن لديه قائمة انتظار رسائل مؤشر ترابط ، فيمكنك تعيين AppStopMethodskip إلى 5 وأن NSSM لن يحاول استخدام هذه الأساليب لإيقاف التطبيق.
اعتن بشدة عندما تضمن 8 في قيمة appstopmethodskip. إذا لم يتصل NSSM بمعالجة TerminateProcess () فمن الممكن أن يخرج التطبيق عند توقف الخدمة.
بشكل افتراضي ، ستسمح NSSM للعمليات 1500 مللي ثانية بالرد على كل طريقة من الطرق الموضحة أعلاه قبل الانتقال إلى الطريق التالي. يمكن تكوين المهلة على أساس كل طريقة من خلال إنشاء إدخالات REG_DWORD في السجل ضمن HKLM SYSTEM CurrentControlset Services <Service> Parameters.
appstopMethodConsole AppStopMethodWindow AppStopMethodThreads
يجب تعيين كل قيمة على عدد المللي ثانية للانتظار. يرجى ملاحظة أن المهلة تنطبق على كل عملية في شجرة عملية التطبيق ، وبالتالي قد يكون الوقت الفعلي لإغلاقه أطول من مجموع جميع المهمات التي تم تكوينها إذا كان التطبيق يولد عمليات فرعية متعددة.
لتخطي تطبيق طرق التوقف أعلاه على جميع العمليات في شجرة عملية التطبيق ، وتطبيقها فقط على عملية التطبيق الأصلية ، قم بتعيين HKLM System CurrentControlset Services <Service> Parameters AppKillProcessTree REGISTION ، والتي يجب أن تكون من نوع REG_DWORD ، إلى 0.
بشكل افتراضي ، ستقوم NSSM بإنشاء نافذة وحدة تحكم بحيث يمكن للتطبيقات القادرة على قراءة إدخال المستخدم القيام بذلك - وفقًا للخدمة المسموح بها بالتفاعل مع سطح المكتب.
يمكن قمع إنشاء وحدة التحكم عن طريق تعيين عدد صحيح (reg_dword) hklm system currentControlset Services <Service> Parameters AppNoconsole REGISTION إلى 1.
يمكن لـ NSSM إعادة توجيه الإدخال/الإخراج المدارة إلى أي مسار قادر على فتحه بواسطة CreateFile (). يتيح ذلك ، على سبيل المثال ، التقاط إخراج سجل التطبيق الذي لا يكتب إلا إلى وحدة التحكم أو قبول المدخلات من منفذ تسلسلي.
ستنظر NSSM في السجل تحت HKLM System CurrentControlset Services <Service> Parameters للمفاتيح المقابلة للوسائط إلى CreateFile (). كلها اختيارية. إذا لم يتم إعطاء أي مسار لتيار معين ، فلن يتم إعادة توجيهه. إذا تم إعطاء مسار ولكن تم حذف أي من القيم الأخرى ، فسوف يتلقى افتراضيات معقولة.
appstdin: مسار لتلقي الإدخال. appstdout: مسار لتلقي الإخراج. appstderr: مسار لتلقي إخراج الخطأ.
تقدم المعلمات لـ CreateFile () مع قيم "appstdinsharemode" و "appstdincreationDisposition" و "appstdinflagsandatributes" (ومتماثلة لـ stdout و stderr).
بشكل عام ، إذا كنت تريد أن تقوم الخدمة بتسجيل إخراجها ، فقم بتعيين appstdout و appstderr على نفس المسار ، على سبيل المثال c: Users public service.log ، ويجب أن تعمل. تذكر ، ومع ذلك ، أن المسار يجب أن يكون متاحًا للمستخدم الذي يقوم بتشغيل الخدمة.
عند استخدام إعادة توجيه I/O ، يمكن لـ NSSM تدوير ملفات الإخراج الحالية قبل فتح STDOUT و/أو STDERR. سيتم إعادة تسمية ملف موجود باحقة بناءً على آخر وقت للكتابة في الملف ، إلى الدقة المللي ثانية. على سبيل المثال ، قد يتم تدوير ملف NSSM.Log إلى NSSM-201313121T113939.457.log.
ستنظر NSSM في السجل تحت HKLM System CurrentControlset Services <Service> Parameters لإدخالات REG_DWORD التي تتحكم في كيفية حدوث الدوران.
إذا كانت AdvontateFiles مفقودة أو ضبطها على 0 ، يتم تعطيل الدوران. أي قيمة غير صفرية تتيح الدوران.
إذا كان AsprotateSeconds غير صفري ، فلن يتم تدوير ملف إذا كان آخر وقت للكتابة أقل من عدد الثواني المحددة في الماضي.
إذا كان AdvotateBytes غير صفري ، فلن يتم تدوير ملف إذا كان أصغر من العدد المعطى من البايتات. يمكن معالجة أحجام الملفات 64 بت من خلال تعيين قيمة غير صفرية من AdvontateByTeshigh.
إذا كان ApproTatedElay غير صفري ، فسيتم إيقاف NSSM للعدد المعطى من المللي ثانية بعد الدوران.
إذا كانت AppStDoutCopyandTruncate أو AppStderRcopyandTruncate غير صفرية ، فسيتم تدوير ملف STDOUT (أو StderR على التوالي) عن طريق أخذ نسخة من الملف أولاً ثم اقتطاع الملف الأصلي إلى حجم الصفر. يتيح هذا لـ NSSM تدوير الملفات التي يتم فتحها بواسطة عمليات أخرى ، مما يمنع النجاح المعتاد () من النجاح. لاحظ أن عملية النسخ قد تستغرق بعض الوقت إذا كان الملف كبيرًا ، وسوف يستهلك مؤقتًا ضعف مساحة القرص مثل الملف الأصلي. لاحظ أيضًا أن التطبيقات التي تقرأ ملف السجل قد لا تلاحظ أن حجم الملف قد تم تغييره. قد يساعد استخدام هذا الخيار بالتزامن مع ApproTatedElay في هذه الحالة.
الدوران مستقل عن معلمات CreateFile () المستخدمة لفتح الملفات. سيتم تدويرها بغض النظر عما إذا كانت NSSM قد تم إلحاقها أو استبدالها.
يمكن لـ NSSM أيضًا تدوير الملفات التي تضغط على عتبة الحجم المكونة أثناء تشغيل الخدمة. بالإضافة إلى ذلك ، يمكنك تشغيل دوران عند الطلب عن طريق تشغيل الأمر
nssm rotate <servicename>
ستحدث الدورات عند الطلب بعد قراءة السطر التالي من البيانات من التطبيق المدار ، بغض النظر عن قيمة AdvontateBytes. انتبه إلى أنه إذا لم يكن التطبيق مطوّلًا بشكل خاص ، فقد لا يحدث الدوران لبعض الوقت.
لتمكين التناوب عبر الإنترنت و عند الطلب ، قم بتعيين AddateOnline على قيمة غير صفرية.
لاحظ أن الدوران عبر الإنترنت يتطلب NSSM اعتراض I/O للتطبيق وإنشاء ملفات الإخراج نيابة عن ذلك. هذا أكثر تعقيدًا ومعرضًا للخطأ من مجرد إعادة توجيه تدفقات الإدخال/الإخراج قبل إطلاق التطبيق. لذلك لا يتم تمكين الدوران عبر الإنترنت افتراضيًا.
عند إعادة توجيه الإخراج ، يمكن لـ NSSM بادئة كل سطر من الإخراج مع طابع زمني لتوليد ميلي ثانية ، على سبيل المثال:
2016-09-06 10:17:09.451 Pipeline main started
لتمكين بادئة الطابع الزمني ، اضبط ApptimeStamplog على قيمة غير صفرية.
تنطبق البادئة على كل من stdout و stderr. يتطلب البادئة اعتراض I/O للتطبيق بالطريقة نفسها التي يعمل بها الدوران عبر الإنترنت. إذا تم تمكين دوران السجل والوقود الزمني على حد سواء ، فسيكون الدوران عبر الإنترنت.
يمكن لـ NSSM استبدال أو إلحاق بيئة التطبيق المدارة. يتم التعرف على اثنين من قيم اثنين من السلسلة (reg_multi_sz) تحت HKLM System CurrentControlset Services <Service> Parameters.
تحدد AppenVironment قائمة بمتغيرات البيئة التي ستجاوز بيئة الخدمة. يحدد AppenVironmentExtra قائمة بمتغيرات البيئة التي سيتم إضافتها إلى بيئة الخدمة.
يجب أن يكون كل إدخال في القائمة من مفتاح النموذج = القيمة. من الممكن حذف القيمة ولكن الرمز = إلزامي.
تخضع متغيرات البيئة المدرجة في كل من AppenVironment و AppenVironmentExtra للتوسع الطبيعي ، لذلك من الممكن ، على سبيل المثال ، تحديث مسار النظام عن طريق تعيين "Path = C: Bin ؛ ٪ path ٪" في AppenVironmentExtra. يتم توسيع المتغيرات بالترتيب الذي تظهر به ، لذلك إذا كنت ترغب في تضمين قيمة متغير واحد في متغير آخر ، فيجب أن تعلن التبعية أولاً.
نظرًا لأن المتغيرات المحددة في البيئة Appenvironment تتجاوز البيئة الحالية ، فليس من الممكن الإشارة إلى أي متغيرات تم تعريفها مسبقًا.
على سبيل المثال ، كتلة البيئة التالية:
PATH=C:WindowsSystem32;C:Windows
PATH=C:bin;%PATH%
من شأنه أن يؤدي إلى مسار "C: bin ؛ c: windows system32 ؛ c: windows" كما هو متوقع.
في حين أن كتلة البيئة التالية:
PATH=C:bin;%PATH%
قد يؤدي إلى مسار يحتوي فقط على C: Bin وربما يتسبب في فشل التطبيق.
سيرغب معظم الناس في استخدام AppenVironmentExtra حصريًا. Srvany يدعم فقط AppenVironment.
اعتبارًا من الإصدار 2.25 ، تقوم NSSM بتوصيف البيئة و AppenVironmentExtra نفسها ، قبل قراءة أي قيم تسجيل أخرى. نتيجة لذلك ، أصبح من الممكن الآن الرجوع إلى متغيرات البيئة المخصصة في التطبيق و AppDirectory وغيرها من المعلمات.
يمكن اجتياز جميع خدمات Windows متغيرات بيئة إضافية عن طريق إنشاء قيمة تسجيل سلسلة متعددة (Reg_Multi_SZ) المسماة HLKM System CurrentControlset Services <Service> Environment.
سيتم دمج محتويات كتلة البيئة هذه في بيئة النظام قبل بدء الخدمة.
ومع ذلك ، لاحظ أنه سيتم فرز البيئة المدمجة أبجديًا قبل معالجتها. هذا يعني أنه في الممارسة العملية ، لا يمكنك ضبط ، على سبيل المثال ، DIR = ٪ Programfiles ٪ في كتلة البيئة لأن البيئة التي تم تمريرها إلى الخدمة لن تكون قد حددت ٪ Programfiles ٪ بحلول الوقت الذي يتعلق الأمر بتحديد ٪ dir ٪. متغيرات البيئة المحددة في appenvironmentextra لا تعاني من هذا القيد.
اعتبارًا من الإصدار 2.25 ، يمكن لـ NSSM الحصول على كتلة البيئة وتعيينها باستخدام أوامر مماثلة لـ:
nssm get <servicename> Environment
تجدر الإشارة إلى أن كتلة البيئة متاحة لجميع خدمات Windows ، وليس فقط خدمات NSSM.
تعتمد بيئة NSSM إلى التطبيق على كيفية تكوين قيم السجل المختلفة. يصف التدفق التالي كيفية تعديل البيئة.
افتراضيًا: ترث الخدمة بيئة النظام.
إذا تم تعريف البيئة: يتم دمج محتويات البيئة في البيئة.
إذا تم تعريف Parameters AppenVironment: ترث الخدمة البيئة المحددة في AppenVironment.
إذا تم تعريف Parameters AppenVironmentExtra: يتم إلحاق محتويات AppenVironmentExtra بالبيئة.
لاحظ أن AppenVironment يتجاوز بيئة النظام وكتلة البيئة المدمجة. لاحظ أيضًا أن AppenVironmentExtra مضمون لإلحاقه ببيئة بدء التشغيل إذا تم تعريفه.
يمكن لـ NSSM تشغيل أوامر قابلة للتكوين للمستخدم استجابةً لأحداث التطبيق. يشار إلى هذه الأوامر باسم "السنانير" أدناه.
جميع السنانير اختيارية. سيتم إطلاق أي خطافات يتم تشغيلها مع البيئة التي تم تكوينها للخدمة. سيضع NSSM متغيرات إضافية في البيئة التي يمكن أن تستفسر عن السنانير لمعرفة كيف ولماذا تم استدعاؤها.
يتم تصنيف السنانير حسب الحدث والعمل. يتم تشغيل بعض السنانير بشكل متزامن وبعضها يتم تشغيله بشكل غير متزامن. يتم تشغيل السنانير مع *العلامة النجمية بشكل متزامن. سوف NSSM تنتظر هذه السنانير لإكمال قبل مواصلة عملها. لاحظ ، مع ذلك ، أن جميع الخطافات تخضع لموعد نهائي يتم بعدها قتلها ، بغض النظر عما إذا كانت تم تشغيلها بشكل غير متزامن أم لا.
الحدث: ابدأ - يتم تشغيله عندما يُطلب من الخدمة البدء. *الإجراء: ما قبل - يسمى قبل NSSM يحاول إطلاق التطبيق. الإجراء: Post - يسمى بعد بدء التطبيق بنجاح.
الحدث: توقف - يتم تشغيله عندما يُطلب من الخدمة التوقف. *الإجراء: ما قبل - يسمى قبل NSSM يحاول قتل التطبيق.
الحدث: الخروج - يتم تشغيله عندما يخرج التطبيق. *الإجراء: Post - دعا بعد NSSM قد قام بتنظيف التطبيق.
الحدث: تدوير - يتم تشغيله عند طلب دوران السجل عبر الإنترنت. *الإجراء: ما قبل - يسمى قبل NSSM يدور السجلات. الإجراء: Post - يسمى بعد NSSM يدور السجلات.
الحدث: إجراء الطاقة: التغيير - يسمى عندما تتغير حالة طاقة النظام. الإجراء: استئناف - تسمى عندما استأنف النظام من الاستعداد.
لاحظ أنه لا يوجد خطاف توقف/آخر. وذلك لأن الخروج/المنشور يتم استدعاؤه عندما يخرج التطبيق ، بغض النظر عما إذا كان قد فعل ذلك استجابة لطلب إغلاق الخدمة. لا يتم استدعاء/قبل فقط قبل محاولة إيقاف تشغيل رشيقة.
يقوم NSSM بتعيين متغير البيئة NSSM_Hook_Version على رقم موجب. يمكن للسنانير التحقق من قيمة الرقم لتحديد متغيرات البيئة الأخرى المتاحة لهم.
إذا كان nssm_hook_version 1 أو أكثر ، يتم توفير هذه المتغيرات:
NSSM_EXE - المسار إلى NSSM نفسه. NSSM_Configuration - بناء معلومات لـ NSSM القابلة للتنفيذ ، على سبيل المثال تصحيح 64 بت. NSSM_Version - إصدار NSSM قابل للتنفيذ. NSSM_BUILD_DATE - تاريخ بناء NSSM. NSSM_PID - معرف العملية للتشغيل NSSM قابل للتنفيذ. NSSM_Deadline - الموعد النهائي عدد المللي ثانية وبعد ذلك سيقتل NSSM الخطاف إذا كان لا يزال قيد التشغيل. nssm_service_name - اسم الخدمة التي تسيطر عليها NSSM. nssm_service_displayname - اسم عرض الخدمة. NSSM_COMMAND_LINE - سطر الأوامر المستخدمة لإطلاق التطبيق. nssm_application_pid - معرف العملية لعملية التطبيق الأساسية. قد تكون فارغة إذا لم تكن العملية قيد التشغيل. NSSM_EVENT - فئة الأحداث التي تسبب الخطاف. NSSM_ACTION - إجراء الحدث الذي يؤدي إلى الخطاف. NSSM_TRIGGER - التحكم في الخدمة مما يؤدي إلى الخطاف. قد يكون فارغًا إذا لم يتم تشغيل الخطاف عن طريق التحكم في الخدمة ، مثل الخروج/المنشور. NSSM_LAST_CONTROL - آخر التحكم في الخدمة التي تعالجها NSSM. nssm_start_requested_count - عدد المرات التي طُلب فيها الطلب للبدء. NSSM_START_COUNT - عدد المرات التي بدأ فيها التطبيق بنجاح. nssm_throttle_count - عدد مرات تشغيل التطبيق لمدة أقل من فترة الخانق. قم بإعادة التعيين إلى الصفر في البداية الناجحة أو عندما تكون الخدمة غير متوفرة بشكل صريح. NSSM_EXIT_COUNT - عدد مرات خروج التطبيق. NSSM_EXITCODE - رمز الخروج من التطبيق. قد يكون فارغًا إذا كان التطبيق لا يزال قيد التشغيل أو لم يبدأ بعد. NSSM_Runtime - عدد المللي ثانية التي تم تشغيل NSSM القابلة للتنفيذ. nssm_application_runtime - عدد المللي ثانية التي تم تشغيل التطبيق لها منذ أن بدأ آخر مرة. قد يكون فارغًا إذا لم يتم البدء في الطلب بعد.
قد توفر الإصدارات المستقبلية من NSSM المزيد من متغيرات البيئة ، وفي هذه الحالة سيتم تعيين NSSM_Hook_Version على رقم أعلى.
يتم تكوين السنانير عن طريق إنشاء قيم string (reg_expand_sz) في السجل المسمى على بعد إجراء الخطاف ووضعه تحت HKLM System CurrentControlset Services <Service> Parameters Appevents <event>.
على سبيل المثال ، يمكن تكوين الخدمة لإعادة التشغيل عندما يستأنف النظام من الاستعداد عن طريق ضبط Appevents Power Resume to:
%NSSM_EXE% restart %NSSM_SERVICE_NAME%
لتعيين خطاف على سطر الأوامر ، استخدم
nssm set <servicename> AppEvents <event>/<action> <command>
لاحظ أن NSSM ستعود إلى بدء تشغيل التطبيق إذا قامت START/PRE -HOOP بإرجاع رمز الخروج من 99.
ستدير الخدمة عادة السنانير بالترتيب التالي:
ابدأ/بدء/ما بعد الإيقاف/الخروج المسبق/النشر
إذا تعطل الطلب وتم إعادة تشغيله بواسطة NSSM ، فقد يكون الطلب:
ابدأ/بداية/نشر خروج/ما بعد البدء/ما قبل البدء/النشر/الخروج/المسبق
إذا كان NSSM يعيد توجيه STDOUT أو STDERR ، فيمكن تكوينه لإعادة توجيه إخراج أي خطافات يتم تشغيله. تعيين Appredirecthooks على 1 لتمكين هذه الوظيفة. علبة الخطاف بالطبع تعيد توجيه I/O بشكل مستقل عن NSSM.
يمكن لـ NSSM تعديل إعدادات الخدمات الحالية مع نفس واجهة المستخدم الرسومية المستخدمة لتثبيتها. يجري
nssm edit <servicename>
لإحضار واجهة المستخدم الرسومية.
يوفر NSSM إمكانات تحرير محدودة للخدمات الأخرى غير تلك التي تدير NSSM نفسها. عندما يُطلب من NSSM تحرير خدمة لا تحتوي على إعدادات التسجيل* الموضحة أعلاه ، فإن واجهة المستخدم الرسومية ستسمح بتحرير إعدادات النظام فقط مثل اسم عرض الخدمة والوصف.
يمكن لـ NSSM استرداد أو تعيين معلمات الخدمة الفردية من سطر الأوامر. بشكل عام ، فإن بناء الجملة كما يلي ، على الرغم من انظر أدناه للحصول على استثناءات.
nssm get <servicename> <parameter>
nssm set <servicename> <parameter> <value>
يمكن أيضًا إعادة تعيين المعلمات إلى قيمها الافتراضية.
nssm reset <servicename> <parameter>
أسماء المعلمات المعترف بها من قبل NSSM هي نفس أسماء إدخال التسجيل الموضحة أعلاه ، على سبيل المثال appdirectory.
يوفر NSSM إمكانات تحرير محدودة للخدمات الأخرى غير تلك التي تدير NSSM نفسها. المعلمات المعترف بها هي كما يلي:
الوصف: وصف الخدمة. DisplayName: اسم عرض الخدمة. البيئة: خدمة البيئة المدمجة. PictorPath: مسار إلى الخدمة القابلة للتنفيذ. ObjectName: حساب المستخدم الذي يدير الخدمة. الاسم: اسم مفتاح الخدمة. ابدأ: نوع بدء تشغيل الخدمة. النوع: نوع الخدمة.
هذه تتوافق مع قيم التسجيل ضمن مفتاح الخدمة HKLM System CurrentControlset Services <Service>.
لاحظ أن NSSM سوف يسلط جميع الوسائط التي تم تمريرها على سطر الأوامر مع مسافات لتشكيل القيمة المتمثلة في تعيينها. وبالتالي فإن الدعتين التاليتين سيكون لهما نفس التأثير.
nssm set <servicename> Description "NSSM managed service"
nssm set <servicename> Description NSSM managed service
تتعرف معلمات AppenVironment و AppenVironmentExtra ومعلمات البيئة على وسيطة إضافية عند الاستعلام عن البيئة. سيقوم بناء الجملة التالي بطباعة جميع متغيرات البيئة الإضافية التي تم تكوينها للخدمة
nssm get <servicename> AppEnvironmentExtra
في حين أن بناء الجملة أدناه سيطبع فقط قيمة متغير ClassPath إذا تم تكوينه في كتلة البيئة ، أو السلسلة الفارغة إذا لم يتم تكوينها.
nssm get <servicename> AppEnvironmentExtra CLASSPATH
عند تعيين كتلة بيئة ، يجب تحديد كل متغير كمفتاح = زوج القيمة في وسيطات سطر الأوامر منفصلة. على سبيل المثال:
nssm set <servicename> AppEnvironment CLASSPATH=C:Classes TEMP=C:Temp
بدلاً من ذلك ، يمكن أن يسبق المفتاح برمز A + أو - لإضافة أو إزالة زوج من الكتلة على التوالي.
يعين السطران التاليان classpath و temp:
nssm set <servicename> AppEnvironment CLASSPATH=C:Classes
nssm set <servicename> AppEnvironment +TEMP=C:Temp
إذا كان المفتاح موجودًا بالفعل ، فسيتخطى تحديد +مفتاح القيمة مع الحفاظ على ترتيب المفاتيح:
nssm set <servicename> AppEnvironment +CLASSPATH=C:NewClasses
يزيل بناء الجملة التالي متغيرًا واحدًا من الكتلة مع ترك أي متغيرات أخرى في مكانها.
nssm set <servicename> AppEnvironment -TEMP
تحديد -key = القيمة ستقوم بإزالة المتغير فقط إذا كانت القيمة الحالية تتطابق معها.
بناء الجملة التالي لن يزيل temp = c: temp
nssm set <servicename> AppEnvironment -TEMP=C:WorkTemporary
الرموز + و - هي أحرف صالحة في متغيرات البيئة. بناء الجملة: المفتاح = القيمة المكافئة لـ key = value ويمكن استخدامه لتعيين المتغيرات التي تبدأ بـ +/- أو لإعادة ضبط الكتلة بشكل صريح في البرنامج النصي:
nssm set <servicename> AppEnvironment :CLASSPATH=C:Classes
nssm set <servicename> AppEnvironment +TEMP=C:Temp
تتطلب معلمة APPEXIT وسيطة إضافية تحدد رمز الخروج أو تعيينه. يمكن تحديد الإجراء الافتراضي مع السلسلة الافتراضية.
على سبيل المثال ، للحصول على إجراء الخروج الافتراضي لخدمة يجب تشغيله
nssm get <servicename> AppExit Default
للحصول على إجراء الخروج عندما يخرج التطبيق برمز الخروج 2 ، قم بتشغيله
nssm get <servicename> AppExit 2
لاحظ أنه إذا لم يتم تكوين إجراء صريح لرمز خروج محدد ، فسيقوم NSSM بطباعة إجراء الخروج الافتراضي.
لتعيين تكوين الخدمة للتوقف عندما يخرج التطبيق برمز خروج 2 ، قم بتشغيله
nssm set <servicename> AppExit 2 Exit
يتم استخدام معلمة APPRiority لتعيين فئة الأولوية للتطبيق المدارة. الأولويات الصحيحة هي كما يلي:
realtime_priority_class high_priority_class أعلاه _normal_priority_class normal_priority_class أدناه _normal_priority_class idle_priority_class
يتم استخدام معلمات DepherOngRoup و TerponService للاستعلام أو تعيين التبعيات للخدمة. عند تعيين التبعيات ، يجب تحديد كل خدمة أو مجموعة خدمة (مسبقة برمز +) في وسيطات سطر أوامر منفصلة. على سبيل المثال:
nssm set <servicename> DependOnService RpcSs LanmanWorkstation
بدلاً من ذلك ، يمكن أن يكون اسم التبعية بادئة مع A + أو - رمز لإضافة أو إزالة التبعية على التوالي.
يضع الخطان التاليان تبعيات على RPCSS و Lanmanworkstation:
nssm set <servicename> DependOnService RpcSs
nssm set <servicename> DependOnService +LanmanWorkstation
يزيل بناء جملة Follwing التبعية على RPCSS:
nssm set <servicename> DependOnService -RpcSs
يجب أن تكون مجموعات الخدمة ، بالمعنى الدقيق للكلمة ، مرفوعة برمز +. لتحديد تبعية واحدة على مجموعة ، يمكن أن يربى رمز + برمز:.
الخطوط التالية مكافئة ، وكل منها يضع تبعية فقط على NetBiosGroup:
nssm set <servicename> DependOnGroup NetBIOSGroup
nssm set <servicename> DependOnGroup :NetBIOSGroup
nssm set <servicename> DependOnGroup :+NetBIOSGroup
في حين أن هذه الخطوط تضيف إلى أي تبعيات موجودة:
nssm set <servicename> DependOnGroup +NetBIOSGroup
nssm set <servicename> DependOnGroup ++NetBIOSGroup
لا يمكن الاستعلام عن معلمة الاسم فقط ، وليس تعيينها. يعيد اسم مفتاح سجل الخدمة. قد يكون هذا مفيدًا لمعرفة ما إذا كنت تستفيد من حقيقة أنه يمكنك استبدال اسم عرض الخدمة في أي مكان حيث يستدعي بناء الجملة.
تتطلب معلمة ObjectName وسيطة إضافية فقط عند تعيين اسم مستخدم. الوسيطة الإضافية هي كلمة مرور المستخدم.
لاسترداد اسم المستخدم ، قم بالتشغيل
nssm get <servicename> ObjectName
لتعيين اسم المستخدم وكلمة المرور ، قم بتشغيل
nssm set <servicename> ObjectName <username> <password>
لاحظ أن قواعد التسلسل لا تزال تنطبق. الاحتجاج التالي صالح وسيكون له التأثير المتوقع.
nssm set <servicename> ObjectName <username> correct horse battery staple
أسماء المستخدمين المعروفة التالية لا تحتاج إلى كلمة مرور. يمكن حذف معلمة كلمة المرور عند استخدامها:
"alcalsystem" AKA "System" AKA "NT Authority System" "FacalService" AKA "Service Local Service" AKA "NT Authority Local Service" "NetWorkservice" AKA "Network Service" AKA "NT Authority Network Service" حساب خدمة افتراضية "NT Service <visericename>"
يتم استخدام معلمة START للاستعلام أو تعيين نوع بدء الخدمة. أنواع بدء تشغيل الخدمة الصالحة هي كما يلي:
service_auto_start: بدء التشغيل التلقائي عند التمهيد. service_delayed_start: تأخر بدء التشغيل عند التمهيد. service_demand_start: بدء تشغيل الخدمة اليدوية. service_disabled: يتم تعطيل الخدمة.
لاحظ أن service_delayed_start غير مدعوم على إصدارات Windows قبل Vista. ستقوم NSSM بتعيين الخدمة على بدء التشغيل التلقائي إذا لم يكن تأخير البدء متاحًا.
يتم استخدام المعلمة النوع للاستعلام أو تعيين نوع الخدمة. يتعرف NSSM على جميع أنواع الخدمات الموثقة حاليًا ولكن سيسمح فقط بإعداد أحد النوعين:
service_win32_own_process: خدمة مستقلة. هذا هو الافتراضي. Service_Interactive_process: خدمة يمكنها التفاعل مع سطح المكتب.
لاحظ أنه لا يجوز تكوين الخدمة إلا على أنها تفاعلية إذا تم تشغيلها ضمن حساب Loldystem. الطريقة الآمنة لتكوين خدمة تفاعلية على مرحلتين على النحو التالي.
nssm reset <servicename> ObjectName
nssm set <servicename> Type SERVICE_INTERACTIVE_PROCESS
يقدم NSSM ميزات التحكم في الخدمة البدائية.
nssm start <servicename>
nssm restart <servicename>
nssm stop <servicename>
nssm status <servicename>
nssm statuscode <servicename>
إخراج "حالة NSSM" و "NSSM statusCode" هو سلسلة تمثل حالة الخدمة ، على سبيل المثال service_running.
سيكون رمز الخروج من "حالة NSSM" 0 إذا تم استرداد الحالة بنجاح. إذا كان رمز الخروج ليس صفرًا ، فهناك خطأ.
سيكون رمز الخروج من "NSSM statuscode" هو القيمة الرقمية لحالة الخدمة ، على سبيل المثال 4 للخدمة. الصفر ليس رمز حالة خدمة صالح. إذا كان رمز الخروج هو الصفر ، فهناك خطأ.
يمكن لـ NSSM أيضًا إزالة الخدمات. يجري
nssm remove <servicename>
لإزالة الخدمة. ستتم مطالبتك بالتأكيد قبل إزالة الخدمة. حاول عدم إزالة خدمات النظام الأساسية ...
لإزالة خدمة دون تأكيد من واجهة المستخدم الرسومية ، قم بتشغيل
nssm remove <servicename> confirm
حاول عدم إزالة خدمات النظام الأساسية ...
سجلات NSSM إلى سجل أحداث Windows. يسجل نفسه كمصدر سجل الأحداث ويستخدم معرفات الحدث الفريدة لكل نوع من الرسائل التي يسجلها. قد تضيف الإصدارات الجديدة أنواع الأحداث ولكن معرفات الحدث الحالية لن يتم تغييرها أبدًا.
نظرًا للطريقة التي تسجل بها NSSM نفسها ، يجب أن تكون على دراية بأنك قد لا تكون قادرًا على استبدال ثنائي NSSM إذا كان لديك عارض الحدث مفتوحًا وأن تشغيل مثيلات متعددة من NSSM من مواقع مختلفة قد يكون مربكًا إذا لم تكن نفس الإصدار.
سيقوم الأمر التالي بطباعة أسماء جميع الخدمات التي تديرها NSSM:
nssm list
لمشاهدة جميع الخدمات على النظام ، وليس فقط NSSM ، استخدم قائمة كل:
nssm list all
سيقوم الأمر التالي بطباعة معرف العملية ومسار العمليات القابل للتنفيذ التي بدأتها خدمة معينة:
nssm processes <servicename>
لاحظ أنه إذا تم تشغيل NSSM 32 بت على نظام 64 بت يعمل على إصدار أقدم من Windows من Vista ، فلن يكون قادرًا على الاستعلام عن مسارات 64 بت.
يمكن لـ NSSM تفريغ الأوامر التي من شأنها إعادة إنشاء تكوين الخدمة. يمكن لصق الإخراج في برنامج نصي دفعة لدعم الخدمة أو النقل إلى كمبيوتر آخر.
nssm dump <servicename>
نظرًا لأن تكوين الخدمة قد يحتوي على أحرف تحتاج إلى اقتباسها أو هروبها من موجه الأوامر ، فإن NSSM يحاول جاهداً إنتاج الإخراج الذي سيعمل بشكل صحيح عند تشغيله كنص ، عن طريق إضافة علامات الاقتباس والتهرب من CARET حسب الاقتضاء.
لتسهيل نسخ الخدمة ، يقبل الأمر Dump وسيطة ثانية تحدد اسم الخدمة المراد استخدامها في الإخراج.
nssm dump <servicename> <newname>
ستشير الخطوط الموجودة في التفريغ إلى الخدمة أثناء إظهار تكوين.
لتثبيت خادم بطولة غير واقعي:
nssm install UT2004 c:gamesut2004systemucc.exe server
لتشغيل الخادم كمستخدم "الألعاب":
nssm set UT2004 ObjectName games password
To configure the server to log to a file:
nssm set UT2004 AppStdout c:gamesut2004service.log
To restrict the server to a single CPU:
nssm set UT2004 AppAffinity 0
To remove the server:
nssm remove UT2004 confirm
To find out the service name of a service with a display name:
nssm get "Background Intelligent Transfer Service" Name
NSSM is known to compile with Visual Studio 2008 and later. Older Visual Studio releases may or may not work if you install an appropriate SDK and edit the nssm.vcproj and nssm.sln files to set a lower version number. They are known not to work with default settings.
NSSM will also compile with Visual Studio 2010 but the resulting executable will not run on versions of Windows older than XP SP2. If you require compatiblity with older Windows releases you should change the Platform Toolset to v90 in the General section of the project's Configuration Properties.
Thanks to Bernard Loh for finding a bug with service recovery. Thanks to Benjamin Mayrargue (www.softlion.com) for adding 64-bit support. Thanks to Joel Reingold for spotting a command line truncation bug. Thanks to Arve Knudsen for spotting that child processes of the monitored application could be left running on service shutdown, and that a missing registry value for AppDirectory confused NSSM. Thanks to Peter Wagemans and Laszlo Keresztfalvi for suggesting throttling restarts. Thanks to Eugene Lifshitz for finding an edge case in CreateProcess() and for advising how to build messages.mc correctly in paths containing spaces. Thanks to Rob Sharp for pointing out that NSSM did not respect the AppEnvironment registry value used by srvany. Thanks to Szymon Nowak for help with Windows 2000 compatibility. Thanks to François-Régis Tardy and Gildas le Nadan for French translation. Thanks to Emilio Frini for spotting that French was inadvertently set as the default language when the user's display language was not translated. Thanks to Riccardo Gusmeroli and Marco Certelli for Italian translation. Thanks to Eric Cheldelin for the inspiration to generate a Control-C event on shutdown. Thanks to Brian Baxter for suggesting how to escape quotes from the command prompt. Thanks to Russ Holmann for suggesting that the shutdown timeout be configurable. Thanks to Paul Spause for spotting a bug with default registry entries. Thanks to BUGHUNTER for spotting more GUI bugs. Thanks to Doug Watson for suggesting file rotation. Thanks to Арслан Сайдуганов for suggesting setting process priority. Thanks to Robert Middleton for suggestion and draft implementation of process affinity support. Thanks to Andrew RedzMax for suggesting an unconditional restart delay. Thanks to Bryan Senseman for noticing that applications with redirected stdout and/or stderr which attempt to read from stdin would fail. Thanks to Czenda Czendov for help with Visual Studio 2013 and Server 2012R2. Thanks to Alessandro Gherardi for reporting and draft fix of the bug whereby the second restart of the application would have a corrupted environment. Thanks to Hadrien Kohl for suggesting to disable the console window's menu. Thanks to Allen Vailliencourt for noticing bugs with configuring the service to run under a local user account. Thanks to Sam Townsend for noticing a regression with TerminateProcess(). Thanks to Barrett Lewis for suggesting the option to skip terminating the application's child processes. Thanks to Miguel Angel Terrón for suggesting copy/truncate rotation. Thanks to Yuriy Lesiuk for suggesting setting the environment before querying the registry for parameters. Thanks to Gerald Haider for noticing that installing a service with NSSM in a path containing spaces was technically a security vulnerability. Thanks to Scott Ware for reporting a crash saving the environment on XP 32-bit. Thanks to Stefan and Michael Scherer for reporting a bug writing the event messages source. Thanks to Paul Baxter for help with Visual Studio 2015. Thanks to Mathias Breiner for help with Visual Studio and some registry fixes. Thanks to David Bremner for general tidyups. Thanks to Nabil Redmann for suggesting redirecting hooks' output. Thanks to Bader Aldurai for suggesting the process tree. Thanks to Christian Long for suggesting virtual accounts. Thanks to Marcin Lewandowski for spotting a bug appending to large files. Thanks to Nicolas Ducrocq for suggesting timestamping redirected output. Thanks to Meang Akira Tanaka for suggestion and initial implementation of the statuscode command. Thanks to Kirill Kovalenko for reporting a crash with NANO server. Thanks to Connor Reynolds for spotting a potential buffer overflow. Thanks to foi for spotting a hang with 64 cores.
NSSM is public domain. You may unconditionally use it and/or its source code for any purpose you wish.