NSSM (The Non-Sucking Service Manager) یک ابزار رایگان و قدرتمند است که به شما اجازه میدهد هر برنامهای را به یک سرویس ویندوز (Windows Service) تبدیل کنید. سرویسهای ویندوز برنامههایی هستند که در پسزمینه اجرا میشوند، مستقل از اینکه کاربری وارد سیستم شده باشد یا نه، و معمولاً با روشن شدن کامپیوتر به طور خودکار شروع به کار میکنند.
ویندوز به صورت پیشفرض اجازه نمیدهد یک اسکریپت ساده (مانند پایتون) یا یک برنامه معمولی را مستقیماً به عنوان سرویس ثبت کنید. NSSM این شکاف را پر میکند و به عنوان یک “پوشش” یا “مدیر” برای برنامه شما عمل میکند.
چرا NSSM بهترین انتخاب برای این کار در ویندوز است؟
تصور کنید اسکریپت شما یک کارمند مهم است که باید ۲۴ ساعته و بدون وقفه کار کند. NSSM مدیر این کارمند است و این مزایای کلیدی را فراهم میکند:
۱. افزایش پایداری و اجرای ۲۴/۷ (Auto-Restart) 📈
- اگر اسکریپت از کار بیفتد (Crash کند): برنامهها ممکن است به دلایل مختلفی مانند خطای کد، قطعی موقت شبکه، یا مشکلات حافظه از کار بیفتند. NSSM به طور مداوم “سلامت” برنامه شما را زیر نظر دارد و به محض اینکه متوجه شود برنامه بسته شده است، فوراً آن را دوباره راهاندازی میکند. این ویژگی به تنهایی باعث میشود برنامههای شما بسیار قابل اعتمادتر شوند.
۲. شروع خودکار و بدون نیاز به دخالت کاربر (Automatic Startup) 🚀
- اگر سیستم ریاستارت شود: سرویسهای ساخته شده با NSSM به طور خودکار با بالا آمدن ویندوز اجرا میشوند. دیگر نیازی نیست به صورت دستی وارد سرور یا کامپیوتر شوید و اسکریپت خود را اجرا کنید. این ویژگی برای سرورها و سیستمهایی که باید همیشه در دسترس باشند، حیاتی است.
۳. اجرا در پسزمینه واقعی (True Background Operation) 🤫
- اسکریپت بدون نیاز به پنجره ترمینال یا لاگین بودن کاربر اجرا میشود. این یعنی برنامه شما به یک کاربر خاص وابسته نیست. حتی اگر از حساب کاربری خود خارج شوید (Logout)، سرویس به کار خود ادامه میدهد. این مزیت بزرگی نسبت به اجرای یک اسکریپت در یک پنجره Command Prompt است که با بستن آن، برنامه نیز متوقف میشود.
۴. مدیریت آسان و متمرکز لاگها (Log Management) 📝
- از آنجایی که برنامه شما در پسزمینه و بدون پنجره اجرا میشود، دیدن خروجیها و خطاها (مثل دستور
print) غیرممکن است. NSSM این مشکل را به زیبایی حل میکند. شما میتوانید به سادگی مشخص کنید که تمام خروجیهای استاندارد و خطاها در فایلهای متنی (.log) ذخیره شوند. این قابلیت برای عیبیابی (Debugging) برنامههایی که در پسزمینه اجرا میشوند، ضروری است.
۵. سادگی استفاده و عدم نیاز به تغییر کد ✨
- این ابزار جایگزین بسیار قدرتمندتر و سادهتری برای روشهایی مانند
pywin32(که نیاز به تغییر کد دارد) یا Task Scheduler است. شما نیازی به تغییر حتی یک خط از کد اسکریپت خود ندارید. NSSM با یک رابط کاربری گرافیکی ساده و دستورات خط فرمان قابل فهم، فرآیند تبدیل برنامه به سرویس را در چند دقیقه ممکن میسازد.
به طور خلاصه، NSSM ابزاری ضروری برای هر توسعهدهنده یا مدیر سیستمی است که میخواهد برنامهها و اسکریپتهای خود را به صورت پایدار، خودکار و مدیریتشده روی ویندوز اجرا کند.
مرحله ۱: دانلود و آمادهسازی NSSM
- دانلود: به وبسایت رسمی NSSM بروید: nssm.cc
- آخرین نسخه را دانلود کنید. این یک فایل
.zipاست. - استخراج فایل: فایل زیپ را باز کنید. داخل آن پوشههای
win32وwin64را خواهید دید. اگر ویندوز شما ۶۴ بیتی است (که اکثر سیستمهای امروزی هستند)، وارد پوشهwin64شوید. - کپی کردن
nssm.exe: فایلnssm.exeرا در یک مسیر ساده و در دسترس کپی کنید. بهترین کار این است که یک پوشه به نامC:\NSSMبسازید و فایل را آنجا قرار دهید تا همیشه بدانید کجاست.
مرحله ۲: نصب یک سرویس جدید
در این مثال، فرض میکنیم میخواهیم یک اسکریپت پایتون را که در یک محیط مجازی (venv) قرار دارد، به سرویس تبدیل کنیم.
- باز کردن ترمینال با دسترسی Admin:در منوی استارت PowerShell یا CMD را جستجو کنید، روی آن راستکلیک کرده و “Run as administrator” را انتخاب کنید.
- رفتن به پوشه NSSM:با دستور cd به پوشهای که nssm.exe را در آن کپی کردید بروید:PowerShell
cd C:\NSSM - اجرای دستور نصب:دستور نصب را با یک نام دلخواه برای سرویس خود وارد کنید. (در PowerShell حتماً از ./ استفاده کنید).PowerShell
.\nssm.exe install MyAwesomeServiceپس از اجرای این دستور، پنجره گرافیکی NSSM باز میشود. - پیکربندی سرویس در پنجره گرافیکی:حالا باید اطلاعات را با دقت وارد کنید.
- تب
Application(مهمترین بخش):- Path: مسیر برنامه اجرایی که میخواهید اجرا شود. برای یک اسکریپت پایتون در محیط مجازی، این مسیر
python.exeداخلvenvاست.- مثال:
C:\MyProject\venv\Scripts\python.exe
- مثال:
- Startup directory: پوشه اصلی پروژه شما.
- مثال:
C:\MyProject
- مثال:
- Arguments:نام اسکریپت یا آرگومانهای دیگر.
- مثال:
main.py
- مثال:
- Path: مسیر برنامه اجرایی که میخواهید اجرا شود. برای یک اسکریپت پایتون در محیط مجازی، این مسیر
- تب
Details(اختیاری):- Display name: یک نام خوانا که در لیست سرویسهای ویندوز نمایش داده میشود (مثلاً
My Awesome Python Service). - Description: توضیح کوتاهی درباره کاری که سرویس انجام میدهد.
- Display name: یک نام خوانا که در لیست سرویسهای ویندوز نمایش داده میشود (مثلاً
- تب I/O (بسیار مهم برای خطایابی):چون سرویس در پسزمینه اجرا میشود، شما خروجی print را نمیبینید. در این تب میتوانید خروجیها را به یک فایل متنی هدایت کنید.
- Output (stdout): یک مسیر برای ذخیره لاگهای عادی (مثلاً
C:\MyProject\logs\service.log). - Error (stderr): یک مسیر برای ذخیره لاگهای خطا (مثلاً C:\MyProject\logs\error.log).نکته: حتماً قبل از نصب، پوشه logs را بسازید.
- Output (stdout): یک مسیر برای ذخیره لاگهای عادی (مثلاً
- تب Exit actions (قابلیت کلیدی NSSM):اینجا مشخص میکنید که اگر برنامه بسته شد یا کرش کرد، NSSM چه کاری انجام دهد.
- Restart application را انتخاب کنید.
- Delay: یک تأخیر برای راهاندازی مجدد وارد کنید (مثلاً
5000میلیثانیه برای ۵ ثانیه).
- تب
- نصب نهایی:روی دکمه Install service کلیک کنید. یک پیام موفقیتآمیز نمایش داده میشود و سرویس شما آماده است!
مرحله ۳: مدیریت سرویس 🔧
حالا میتوانید سرویس خود را از طریق خط فرمان (در همان ترمینال ادمین) مدیریت کنید.
- شروع سرویس:PowerShell
.\nssm.exe start MyAwesomeService - توقف سرویس:PowerShell
.\nssm.exe stop MyAwesomeService - راهاندازی مجدد سرویس:PowerShell
.\nssm.exe restart MyAwesomeService - بررسی وضعیت سرویس:PowerShell
.\nssm.exe status MyAwesomeService - ویرایش سرویس (برای تغییر تنظیمات):PowerShell
.\nssm.exe edit MyAwesomeService - حذف سرویس:PowerShell
.\nssm.exe remove MyAwesomeService(قبل از حذف، سرویس باید در حالت متوقف باشد).
شما همچنین میتوانید با اجرای services.msc در منوی استارت، لیست کامل سرویسهای ویندوز را ببینید و سرویس خود را از آنجا نیز مدیریت کنید.
خلاصه دستورات (Cheat Sheet) 🚀
| عملکرد | دستور NSSM |
| نصب سرویس | .\nssm.exe install <ServiceName> |
| حذف سرویس | .\nssm.exe remove <ServiceName> |
| ویرایش سرویس | .\nssm.exe edit <ServiceName> |
| شروع سرویس | .\nssm.exe start <ServiceName> |
| توقف سرویس | .\nssm.exe stop <ServiceName> |
| راهاندازی مجدد | .\nssm.exe restart <ServiceName> |
| بررسی وضعیت | .\nssm.exe status <ServiceName> |




پاسخها