2

Я искал, но не нашел подходящего ответа, поэтому я создаю свой собственный вопрос. У нас есть несколько серверов Windows 2003 с пакетом обновления 2 (SP2), на каждом из которых запущены службы .NET, запускаемые как с локального компьютера, так и с общего ресурса Windows. Но уже во второй раз мы получаем ошибку: Ошибка 1053: служба не отвечает на запрос запуска или управления своевременно при попытке перезапустить службы на одном конкретном сервере, вторая работает так, как должно быть. Поделиться с исполняемым файлом доступно, открывается нормально, есть права доступа. Таким образом, на обоих серверах все выглядит одинаково, но один выдает эти ошибки всем сервисам, которые мы запускаем. Если мы перезагружаем этот сервер - он работает нормально в течение нескольких дней или недели, а затем снова запускается.

У кого-нибудь есть предложения, что это может быть?

2 ответа2

1

У кого-нибудь есть предложения, что это может быть?

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

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

Но перед этим я бы порекомендовал вместо перезапуска попробовать остановить и запустить службу как два разных действия (с небольшой задержкой между ними). Это может помочь определить, возникает ли проблема при закрытии службы или при запуске резервного копирования. Они также могут найти это полезным, если вы можете определить, сколько времени займет успешный старт и остановка.

Вам также следует проверить журнал событий, чтобы увидеть, записана ли какая-либо другая информация.

Когда служба запускается, начальная фаза запуска должна быть завершена в течение определенного времени (обычно 30 секунд). Следовательно, служба обычно старается свести к минимуму объем кода в этом разделе и запускает фоновый поток для выполнения остальной части работы.

Аналогично, когда вы останавливаете службу, она должна завершить этот процесс в течение определенного времени (обычно 20 секунд). Это означает, что любая длительная операция должна быть записана таким образом, чтобы ее можно было отменить, если служба отключается, а не ждать, пока операция не будет завершена.

Все, что приводит к превышению общего периода запуска или завершения работы, приведет к появлению ошибки, которую вы видите.

Чтобы дать вам несколько примеров, которые могут вызвать ошибку. Предположим, что при запуске ваша служба выполняет поиск DNS для имени компьютера / сервера. Обычно это занимает миллисекунды, но если DNS неправильно настроен на сервере, это может занять 15 секунд или более, что может быть достаточно, чтобы общее время запуска превысило лимит. Вторая попытка может кэшировать запись DNS и, следовательно, работать в течение установленного времени.

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

Если службы .Net широко используются, вам может повезти, и вы обнаружите, что кто-то еще в Интернете сталкивался с подобной проблемой и нашел решение. Но действительная причина во многом зависит от того, что на самом деле делает служба при запуске и завершении работы, поэтому вам лучше поговорить с разработчиками.

1

Существует исправление, доступное из Microsoft

http://support.microsoft.com/kb/886695

Эта проблема возникает из-за того, что библиотека Iisutil.dll добавляет запись управления доступом (ACE) в дескриптор безопасности рабочего стола для служб, которые работают в контексте системы. ACE позволяет учетной записи рабочей группы Microsoft Internet Information Services (IIS_WPG) войти на рабочий стол системной службы. Однако, если другой процесс устанавливает нулевое значение дескриптора безопасности рабочего стола для служб, работающих в системном контексте, Iisutil.dll изменяет список управления доступом по усмотрению (DACL). Iisutil.dll изменяет список DACL, так что любая служба, которая использует неинтерактивную локальную системную учетную запись, не может войти в систему.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .