Перейти к содержимому

Как перезапустить службу iis

  • автор:

Использование IISReset.exe для перезапуска IIS приводит к сообщению об ошибке

Эта статья поможет устранить проблему, которая возникает при использовании IISReset.exe для перезапуска службы IiS.

Оригинальная версия продукта: службы IIS
Исходный номер базы знаний: 969864

Заявление об отказе от быстрой публикации

Статьи о быстрой публикации предоставляют сведения непосредственно из службы поддержки Майкрософт. Сведения, содержащиеся в этом документе, создаются в ответ на новые или уникальные темы или предназначены для дополнения других база знаний информации.

Симптом

При использовании IIReset.exe /NOFORCE командной строки вместе с параметром для сброса служб IIS может появиться сообщение об ошибке, похожее на следующее:

    Сообщение об ошибке 1

При выполнении этой операции произошла ошибка.
В данный момент служба не может принимать контрольные сообщения. (2147943461, 80070425)

Сбой попытки перезапуска.
В данный момент служба не может принимать контрольные сообщения. (2147943461, 80070425)

Причина

IISReset.exe не удается своевременно остановить службы IIS. Если этот /NOFORCE параметр включен, IISReset.exe не будет пытаться принудительно завершить работу служб IIS, если службы не останавливаются корректно.

Решение

Не используйте средство IISReset.exe для перезапуска служб IIS. Вместо этого используйте команды NET STOP и NET START команды. Например, чтобы остановить и запустить службу веб-публикации, выполните следующие команды:

C:\> NET STOP w3svc The World Wide Web Publishing Service service is stopping. The World Wide Web Publishing Service service was stopped successfully. C:\> NET START w3svc The World Wide Web Publishing Service service is starting. The World Wide Web Publishing Service service was started successfully. 

Чтобы остановить и запустить службу iiS Администратор, выполните следующие команды:

C:\> NET STOP iisadmin /y 

Следующие службы зависят от службы iiS Администратор Service. Остановка служб iiS Администратор службы также остановит эти службы.

World Wide Web Publishing Service HTTP SSL The World Wide Web Publishing Service service is stopping. The World Wide Web Publishing Service service was stopped successfully. The HTTP SSL service is stopping. The HTTP SSL service was stopped successfully. The IIS Admin Service service is stopping.. The IIS Admin Service service was stopped successfully. 
C:\> NET START w3svc The World Wide Web Publishing Service service is starting. The World Wide Web Publishing Service service was started successfully. 

Дополнительные сведения

Использование команд для NET STOP/NET START перезапуска служб IIS имеет два преимущества, а не использование IISReset.exe служб. Во-первых, изменения конфигурации IIS, которые находятся в процессе сохранения при IISReset.exe выполнения команды, могут быть потеряны. Во-в IISReset.exe может затруднить определение зависимых служб или служб, которые не удалось остановить при возникновении этой проблемы. С помощью команд NET STOP для остановки каждой отдельной зависимой службы можно определить, какая служба не может остановиться, поэтому вы сможете соответствующим образом устранить ее сбой.

Отказ от ответственности за содержимое общедоступных решений

Корпорация Майкрософт и/или ее поставщики не делают никаких заявлений относительно пригодности, надежности или точности сведений и соответствующих изображений, приведенных в настоящем документе. Все эти сведения и соответствующие изображения предоставлены «как есть» без каких-либо гарантий. Корпорация Майкрософт и/или ее поставщики настоящим отказываются от каких-либо гарантийных обязательств и условий в отношении этих сведений и соответствующих изображений, включая все подразумеваемые гарантии и условия товарной пригодности, применимости для конкретных целей, качества исполнения, прав собственности и отсутствия нарушений прав интеллектуальной собственности. В частности, вы подтверждаете свое согласие с тем, что корпорация Майкрософт и/или ее поставщики ни при каких обстоятельствах не несут ответственности за прямой или косвенный ущерб, штрафные санкции, случайные, фактические, косвенные или иные убытки, включая, в частности, убытки от утраты эксплуатационных качеств, от потери данных или прибылей в связи с использованием или невозможностью использовать эти сведения и соответствующие изображения, содержащиеся в настоящем документе, возникшие вследствие соглашения, гражданского правонарушения, халатности, объективной ответственности или иным образом, даже если корпорация Майкрософт или ее поставщики заранее были извещены о возможности такого ущерба.

Обратная связь

Были ли сведения на этой странице полезными?

Автоматический перезапуск IIS службой при нарушении в ее работе

image

Я решил поделиться с Хаброюзерами полезной на мой взгляд программкой, многие сталкивались в работе IIS когда возникает какой то сбой и не всегда можно определить чем он вызван, но сервер перестает работать, возвращает ошибку 500 или еще что то в этом духе, обычно такое лечится перезапуском IIS, но не всегда рядом с сервером есть человек, который может это сделать, в связи с чем возникла идея, почему бы не делать это автоматически, в таком случае восстановление заняло бы максимум 5-10 минут и без присутствия администратора.

Такой подход сработает со многими продуктами, такими как Sharepoint, Webtutor (кто видел тот меня поймет) и любыми другими платформами на IIS, после переделки можно работать и с другими службами, если это нужно.
Описывать код, листинг которого не вижу особого смысла, т.к. его полностью прокомментировал, разберется любой кто хоть немного знаком с C#.
Надеюсь данное приложение поможет кому то в его работе. Буду рад услышать комментарии и пожелания.

P.S. если нужен готовый исходник пишите e-mail в комментариях.

Листинг программы под спойлером

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Globalization; using System.Linq; using System.Net; using System.ServiceProcess; using System.Text; using System.Threading; //using System.Threading.Tasks; namespace WebTutorMonitor < public partial class Service1 : ServiceBase < // Коды, ничего не значат, просто цифры private int Code_Init=101; private int Code_Start=102; private static int Code_CreateLog=103; private int Code_Stop=104; private int Code_Resume=105; private int Code_Pause=106; private static int Code_DoneOneTask=107; private int Code_TascControllerStarted=108; private static int Code_TastWTMonitoringRun=109; static bool Testing = true;//Если true сервис будет работать с тестом, не с боем static bool DoStopStart = false;//Если false реально запуска и остановки не будет, только для проверки static string testserverurl = @"http://webtutor.orient.root.biz"; static string prodserverurl = @"http://wtapp01"; static string testservername = @"webtutor.orient.root.biz"; static string prodservername = @"wtapp01"; public Service1() < EventLog ev = new EventLog("Application", System.Environment.MachineName, "WebTutorMonitor"); //Очистка журнала событий, раскоментировать если нужно почистить журнал //EventLog.Clear(); InitializeComponent(); CreateLog("Служба WebTutorMonitor инициaлизируется.",EventLogEntryType.Information,Code_Init ); if (Testing)//Старт в режиме приложения, для Debug'a, произойдет только если Testing=True < OnStart(null); >> //Действия при запуске службы protected override void OnStart(string[] args) < //Запуск службы CreateLog("Служба WebTutorMonitor запущена успешно.", EventLogEntryType.Information,Code_Start); MainThread(); //Главный процесс службы >//Запись события в журнал событий static void CreateLog(string text, EventLogEntryType Type,int Code) < Thread.Sleep(1500); if (!(EventLog.SourceExists("WebTutorMonitor", System.Environment.MachineName))) < EventLog.CreateEventSource("WebTutorMonitor", "WebTutorLog", System.Environment.MachineName); CreateLog("Создан журнал событий WebTutorMonitor", EventLogEntryType.Information ,Code_CreateLog); >EventLog ev = new EventLog("Application", System.Environment.MachineName, "WebTutorMonitor"); ev.WriteEntry(text, Type, Math.Abs (Code)); ev.Close(); GC.Collect(); > //Действия при остановке службы protected override void OnStop() < CreateLog("Служба WebTutorMonitor остановлена.", EventLogEntryType.Warning ,Code_Stop); TimerCanceled = true; >//Действия при возобновлении работы службы protected override void OnContinue() < CreateLog("Служба WebTutorMonitor запущена после паузы.",EventLogEntryType.Information ,Code_Resume); base.OnContinue(); >//Действия при паузе службы protected override void OnPause() < CreateLog("Служба WebTutorMonitor приостановлена.", EventLogEntryType.Warning,Code_Pause ); base.OnPause(); >//Главный поток службы void MainThread() < //Запуск обработки заданий в отдельном потоке, чтобы освободить текущий поток для диспетчера служб System.Threading.Thread tr = new System.Threading.Thread(new System.Threading.ThreadStart (TimerTask));//Работа потока проходит в процедуре TimerTask tr.Start();//Запуск процедуры TimerTask в отдельном потоке. CreateLog("Менеджер заданий запущен.", EventLogEntryType.Information , Code_TascControllerStarted); >static bool TimerCanceled = false;//Если True поток сервиса получает комманду на остановку //Основная процедура службы static private void TimerTask() < CreateLog("Задача монитор WT запущена.", EventLogEntryType.Information, Code_TastWTMonitoringRun); rr: rcl++; if (TimerCanceled)//Если получен True выкодим из потока < CreateLog("Логирование завершено " + DateTime.Now.ToString() + ". Выполнено " + rcl.ToString() + " итераций логирования.", EventLogEntryType.Information, Code_DoneOneTask); goto ext; >else < StartLogIteration();//Если еще рано выходить запускаем итерацию рабочего процесса >Thread.Sleep(100); goto rr; ext: return; //Выход из потока > //Выключить себя, можно применять для завершения работы службы static void ShutdownMeNow(string reason) < CreateLog("Завершение работы службы: " + reason, EventLogEntryType.Information, Code_DoneOneTask); ServiceController sc = new ServiceController("Webtutormonitor", System.Environment.MachineName);//Webtutormonitor это название службы if (sc.CanStop == true) < sc.Stop();//Посылаем команду на отключение службы на текущем компьютере >> //Выполняем действие (сканируем или что либо другое) static void StartLogIteration() < RunNewScan(); //Сканируем сервер на работоспособность //CreateLog("Работа выполнена " + DateTime.Now.ToString() , EventLogEntryType.Information, Code_DoneOneTask); //Можем написать что бы сделали действие в лог System.Threading.Thread.Sleep(5000);//Поспим, чтобы не слишком часто работать >//Выполняем сканирование сервера static void RunNewScan() < string statdisk;//Переменная для хранения коментария ответа от сервера string urlparam;//Переменная для хранения адреса сервера if (Testing)//Если тестируем то тестовый сервер, если нет то боевой < urlparam = testserverurl;//тестовый >else < urlparam = prodserverurl; >//боевой int stat = ServerStat(out statdisk, new Uri(urlparam));//Получаем данные от сервера, его текущее состояние if (stat!=200)//Если не 200 значит у нас проблемы < CreateLog("Ошибка в работе WT: " + statdisk, EventLogEntryType.Error , stat); if (stat==503)//Если 503 значит он в процессе перезапуска либо у него проблема с учетной записью < DoRestartIIS();//Если первое проверим, перезапустим если нужно >else//другие ошибки < if (stat==404)//Сервер выключен, пробуем включить < if (Testing)//Если тестируем то тестовый сервер, если нет то боевой < StartIISWTNow(testservername);//тестовый >else < StartIISWTNow(prodservername); >//боевой > > > > //процедура перезапуска IIS static void DoRestartIIS() < ServiceController sc;//Контроллер сервисов //Инициируем контроллер для нужного нам сервиса if (Testing)//Если тестируем то тестовый сервер, если нет то боевой < sc = new ServiceController("W3SVC", testservername);//тестовый >else < sc = new ServiceController("W3SVC", prodservername);//боевой >CreateLog("Предпринимаю попытку восстановить сервер путем перезапуска IIS!", EventLogEntryType.Error, 1001); //Пробуем выключить службу веб-публикаций на сервере if (Testing)//Если тестируем то тестовый сервер, если нет то боевой < CreateLog("Типа выключаю сервис!", EventLogEntryType.Error, 1202); ShutdownIISWTNow(testservername);//тестовый >else < ShutdownIISWTNow(prodservername); >//боевой //Если мы тут, то мы смогли выключить службу, иначе до сих пор долбимся в попытках ее отключить //Служба отключена- включаем ее обратно if (Testing)//Если тестируем то тестовый сервер, если нет то боевой < CreateLog("Типа включаю сервис!", EventLogEntryType.Error, 1201); StartIISWTNow(testservername);//тестовый >else < StartIISWTNow(prodservername); >//боевой //Если мы тут, значит сервер сказал что служба запущена и работает Thread.Sleep(5000);//Дадим немного времени sc.Refresh();//Проверим, может врет? //Выводим текущее состояние в лог CreateLog("Сервер в состоянии " + sc.Status.ToString(), EventLogEntryType.Error, 1301); if (sc.Status == ServiceControllerStatus.Running )//Если сработало пишем соответствующую запись в лог, если нет тоже < CreateLog("Попытка перезапутить IIS Удалася!:) ", EventLogEntryType.Error, 1101); >else < CreateLog("Не могу сделать рестарт IIS Функция отключена:( ", EventLogEntryType.Error, 1101); >> //Процедура выключения IIS на сервере, которая используется в процедуре DoRestartIIS static void ShutdownIISWTNow(string compname = testservername) < ServiceController sc = new ServiceController("W3SVC", compname);//Инициализируем контроллер для данного сервера, W3SVC это имя службы веб публикаций на сервере Windows Server 2008 R2 gg: sc.Refresh();//Тут точка возврата, будем возвращаться сюда, если не получилось выключить службу CreateLog("Попытка завершения службы на сервере " + compname, EventLogEntryType.Information, Code_DoneOneTask); if (sc.CanStop == true)//Спрашиваем у сервере, можем ли мы отключить сейчас iis < try //Если да, то пробуем это сделать < if (DoStopStart)//Если false не будем реально ничего делать, просто сделаем вид что пытались < sc.Stop();//Посылаем комманду на отключение службы CreateLog("Сервер получил команду на остановку службы :)", EventLogEntryType.Error, 1004); >else < CreateLog("Сервер не получил команду на остановку службы потому что приложение работает в демо режиме", EventLogEntryType.Error, 1204); >> catch (Exception eee)//Если возникла ошибка пишем ее в лог < CreateLog("Не получилось остановить службу :( " + eee.Message , EventLogEntryType.Error , 1005); >> else//Если сервер говорит, что нельзя останавливаться идем сушить бублики до следующего раза < CreateLog("Её нельзя сейчас останавливать :( Статус сервера: " + sc.Status.ToString(), EventLogEntryType.Error, 1003); >if (sc.Status == ServiceControllerStatus.Stopped)//Если сервер говорит что служба остановлена радуемся, у нас получилось < CreateLog(@"Я остановил службу. =8 Ха! Ха! хА! =\" + sc.Status.ToString(), EventLogEntryType.Warning, 1043); return;//Выходим, чтобы попробовать запустить ее снова. >Thread.Sleep(10000);//если мы пришли сюда значит сервер еще не остановился, а значит у нас почему то не получилось его остановить, //может быть он просто сейчас пытается остановиться но еще не успел закончить, подождем 10 секунд и попробуем снова //так как не остановив запускать его бессмысленно будем долбиться пока не сможем его выключить goto gg;//пробуем снова > //Запуск IIS все по аналогии с остановкой. static void StartIISWTNow(string compname = testservername) < ServiceController sc = new ServiceController("W3SVC", compname); gg: sc.Refresh(); CreateLog("Запуска службы на сервере " + compname, EventLogEntryType.Information, Code_DoneOneTask); if (sc.Status == ServiceControllerStatus.Stopped) < try < if (DoStopStart) < sc.Start(); sc.Refresh(); sc.WaitForStatus(ServiceControllerStatus.Running , new TimeSpan(0, 0, 10)); CreateLog("Сервер получил команду на запуск службы :)", EventLogEntryType.Warning, 1211); >else < CreateLog("Сервер не получил команду на запуск службы потому что приложение работает в демо режиме", EventLogEntryType.Error, 1204); >> catch (Exception eee) < CreateLog("Не получилось запустить службу :( " + eee.Message, EventLogEntryType.Error, 1012); >> else < CreateLog("Её нельзя сейчас запускать :( Статус сервера: " + sc.Status.ToString(), EventLogEntryType.Error, 1013); >if (sc.Status == ServiceControllerStatus.Running ) < CreateLog("У меня получилось запустить службу:)" , EventLogEntryType.Warning , 1023); return; >Thread.Sleep(10000); goto gg; > //Определяем статус сервера в данный момент, descript это дополнительная информация о состоянии, текст ошибки например, url-это адрес узла сервера для проверки static int ServerStat(out string descript, Uri url) < int statusCode=-1; var myCred;//учетные данные, т.к. мы будем входить на сервер IIS под NTLM, передалать на другие типы авторизации проще if (Testing)//Если тестируем то тестовый сервер, если нет то боевой < myCred = new NetworkCredential("vipuhov", "123456", "ORIENT");//тестовый тут мы используем такие учетные данные >else < myCred = CredentialCache.DefaultNetworkCredentials; >//боевой тут мы настроили под какими учетными данными будет запускаться служба Uri urll = url; var myCache = new CredentialCache < < urll, "NTLM", myCred >>;//тут мы привязываем учетные данные к адресу сайта, чтобы установить NTLM авторизацию try < var request = (HttpWebRequest)WebRequest.Create(urll);//создаем объект веб запроса request.Timeout = 50000;//устанавливаем таймаут соединения, 50 секунд это перебор для любого сайта, можно говорить что ему плохо если он минуту страницу показать не может //настраиваем учетные данные и метод, нам сама страница не нужна, поэтому берем только заголовок request.Credentials = myCache; request.Method = WebRequestMethods.Http.Head; request.Accept = @"*/*"; var response = (HttpWebResponse)request.GetResponse();//делаем запрос statusCode = (int)response.StatusCode;//получаем код ответа от сервера response.Close();//закрываем запрос, нам он больше не нужен GC.Collect();//убираем мусор:) descript = "OK";//если мы тут значит все ОК:) return statusCode;//возвращаем код, скорее всего 200 >catch (WebException ex)//тут ловим ошибки < if (ex.Response == null)//если нет ответа от сервера скорее всего ошибка 404 сервер недоступен < descript = ex.Message;//возвращаем текст ошибки >else < statusCode = (int)((HttpWebResponse)ex.Response).StatusCode;//если запрос прошел но сервер возвратил ошибку пишем ошибку возвращаем его код descript = ((HttpWebResponse)ex.Response).StatusDescription;//пишем сообщение которое нам прислал сервер вместе с ошибкой >GC.Collect();//чистим мусор:) return statusCode;//возращаем код ошибки > > > > 
  • автоматизация труда админа
  • IIS
  • c#
  • Windows Server 2008
  • Windows Service
  • .net
  • internet information services
  • sharepoint

IIS — Перезапуск IIS

В IIS 5.0 все службы Интернет могут быть остановлены и перезапущены из оснастки IIS. Это делает необязательным перезапуск компьютера при неправильном функционировании или недоступности приложений.

  1. В оснастке IIS щелкните значок Компьютер в левой панели.
  2. Нажмите кнопку Действие и выберите команду Перезапуск IIS.
  3. В раскрывающемся меню выберите Перезапуск служб Интернета, Остановка служб Интернета, Запуск служб Интернета или Перезагрузка имя_компьютера.

Важно! Перезапуск останавливает все процессы Drwtsn32.exe, Mtx.exe и Dllhost.exe для перезапуска служб Интернета. IIS не может быть перезапущен с помощью диспетчера служб Интернета (HTML).

Примечание. Для перезапуска служб Интернета следует использовать метод обрисованный выше, а не оснастку для служб Windows 2000. Поскольку несколько служб Интернета запускаются в одном процессе, службы Интернета останавливаются и перезапускаются отдельно от служб Windows. Для регулярных перезапусков или интеграции со специальными средствами или средствами, полученными из независимых источников, предлагается версия средства перезапуска оснастки IIS, запускаемая из командной строки: Iisreset.exe. Ниже описано использование командной строки и параметров.

iisreset [ИмяКомпьютера]
/RESTART Останавливает и перезапускает все службы Интернета.
/START Запускает все службы Интернета.
/STOP Останавливает все службы Интернета.
/REBOOT Перезагружает компьютер.
/REBOOTONERROR &nbsp Перезагружает компьютер, если произошла ошибка при запуске, остановке или перезапуске служб Интернета.
/NOFORCE Принудительно не завершает службы Интернета при неудачных попытках остановить их.
/TIMEOUT:знач Указывает значение времени ожидания (в секундах) успешной остановки служб Интернета. По истечении этого времени, если указан параметр /REBOOTONERROR, компьютер может быть перезагружен. Значения по умолчанию: 20 сек. для перезапуска, 60 сек. для остановки и 0 сек. для перезагрузки.
/STATUS Отображает состояние всех служб Интернета.
/ENABLE Включает перезапуск служб Интернета на локальной системе.
/DISABLE Отключает перезапуск служб Интернета на локальной системе.

См. также

  • Сведения о запуске и остановке отдельных веб- и FTP-узлов см. в разделе Запуск и остановка узлов.

Службы Microsoft Internet Information Services (IIS) и Vault

Подробные сведения о взаимодействии Vault и служб IIS.

Когда пользователь отправляет запрос с помощью одного из клиентских приложений, этот запрос отправляется на сервер хранилища, где обрабатывается службами IIS и MSSQLSERVER. Служба IIS идентифицирует пользователя и устанавливает связь с хранилищем файлов с помощью системной учетной записи. По умолчанию служба использует учетную запись LocalSystem. Пользователь может указать другую учетную запись для дополнительной безопасности.

Просмотр настроек сервера в диспетчере служб

  • На панели управления выберите Администрирование > Службы , а затем выберите в списке «IIS Admin».

Статус сервера

Этот столбец содержит сведения о том, запущена ли служба. Служба обычно должна быть запущена, но для работы хранилища это необязательно. Служба IIS запускается при первом подключении клиентов к ней.

Тип запуска

Служба IIS может запускаться вручную, автоматически, а также может быть отключена. В большинстве случаев тип запуска должен иметь значение «Авто». Если тип запуска имеет значение «Вручную», то служба запустится после первого подключения клиента. Рекомендуется установить для типа запуска значение «Авто».

Вход от имени

В этом параметре указывается тип учетной записи для сетевой идентификации. Рекомендуется по умолчанию использовать учетную запись локальной системы.

Также можно указать учетную запись конкретного пользователя для блокировки хранилища. При настройке определенного пользователя доступ других пользователей к хранилищу ограничивается, что позволяет предотвратить несанкционированный доступ и обеспечить повышенную безопасность.

Более подробные сведения приведены в справочной документации по операционной системе.

Ошибки подключения

Если подключение к серверу невозможно выполнить, то необходимо перезапустить службу или весь компьютер.

Прим.: Службы IIS требует перезапуска, если была перезапущена служба SQL Server.

Остановка IIS

  1. В меню «Пуск» Windows выберите «Выполнить».
  2. В командной строке введите команду iisreset /stop

Прим.: Нажатие кнопки «Остановить» в диалоговом окне диспетчера служб IIS не приводит к разрыву подключений базы данных.

Повторный запуск IIS

  1. В меню «Пуск» Windows выберите «Выполнить».
  2. В командной строке введите команду iisreset /start

Если в консоли сервера хранилище все еще отображается в качестве используемого, то администратор может перезагрузить базу данных.

  1. В меню «Пуск» Windows выберите «Все программы» > «Администрирование» > «Службы».
  2. Перезапустите службу MSSQL$AUTODESKVAULT.

Внимание! Если база данных является сервером SQL Server, к которому имеют доступ пользователи, не работающие в Vault, SQL Server не рекомендуется перезапускать.

На уровень выше: Установка Autodesk Vault Server

Информация по данной теме
  • Установка Vault Server в среде Windows Server 2016 и 2019
  • Установка Vault Server в ОС Windows 10 (только Vault Basic)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *