وبلاگ شخصی محمد مظفری

تولدی ناخواسته‌،زندگی‌سخت،مرگی‌اجباری

اتمام سرویسهایی که در حالت Stopping میباشند

۳ مرداد ۱۳۸۷ در دسته سرورهای ویندوز٬ مدیریت سرور

برخی اوقات پیش میاد که یک سرویس ویندوز رو میخواید با استفاده از .net framework به حالت stop در بیارید اما در حالت Stopping گیر میکنه و هرگز Stop نمیشه.در این وضعیت نمیشه هیچ تغییری در سرویس داد،تنها راه terminate کردن سرویس و راه اندازی مجدد میباشد.

مشکل با یک Restart حل میشه اما بعضی اوقات که سرور زیر بار باشه امکان Restart فراهم نیست و یک Restart که به معنی downtime حدودا ۷ تا ۱۰ دقیقه ای هست باعث یک زیان مالی بزرگ میشه.

برای kill کردن اینجور سرویسها کافیه مراحل زیر رو پیگیری کنید:

۱- به command-prompt رفته و مشخصات سرویس رو با استفاده از دستور زیر بدست بیارید:

sc queryex mssql$sql2005

نتیجه ای شبیه زیر باید داشته باشید:

SERVICE_NAME: mssql$2005
TYPE               : ۱۰  WIN32_OWN_PROCESS
STATE              : ۳  STOP_PENDING
(STOPPABLE, NOT_PAUSABLE, ACCEPTS_SHUTDOWN)
WIN32_EXIT_CODE    : ۰  (۰×۰)
SERVICE_EXIT_CODE  : ۰  (۰×۰)
CHECKPOINT         : ۰×۰
WAIT_HINT          : ۰×۰
PID                : ۱۵۹۸۴
FLAGS              :

میبینید که سرویس در حالت Stop_Pending گیر کرده .در اطلاعت بالا شماره این پردازش که در بخش PID نمایش داده شده برای ما اهمیت داره.

۲- با استفاده از فرمان زیر این سرویس رو خاتمه بدید.

taskkill /PID 15984 /F

توجه کنید از این روش فقط برای سرویسهایی که در حالت معمول امکان Start,Stop دارن استفاده نکنید.

ابتدا بدون پارامتر f/ استفاده کنید،اگر نتیجه نداد بعد از اون استفاده کنید.

از این روش برای سرویسهایی که flagهای NOT-STOPPABLE و یا IGNORES_SHUTDOWN رو دارند استفاده نکنید.

منبع۱

منبع۲

نوشتن نظر