Ошибка the request failed or the services did not respond in a timely fashion
Добрый день! Уважаемые читатели и гости IT блога Pyatilistnik.org. В прошлый мы с вами разобрались, что делать если выскакивает ошибка "This action is only valid for that are currently installed" и не удаляется антивирус Касперского. Там мы все успешно выполнили и сегодня поговорим про не менее интересный случай, который как показал интернет не сильно описан. Речь пойдет про устранение ошибки "The request failed or the services did not respond in a timely fashion" при попытке запустить службу SQL Server Agent. Давайте я покажу свой опыт, как я выкручивался в этой ситуации.
Описание проблемы с запуском SQL Server Agent
У меня есть большая инфраструктура физических и виртуальных серверов. В середине декабря началось плановое обслуживание, которое включает в себя одним из этапов установку обновлений безопасности. После перезагрузки сервера на нем появилась проблема, связанная с тем, что перестал запускаться SQL Server Agent. В результате этого не будут работать Jobs. Хорошо, что данный сервер находился в кластере Always On, но вопрос стал критичным. Всех пострадавших объединяло одно, в качестве операционной системы использовалась Windows Server 2022.
В оснастке "Службы" ошибка имела вот такой текст:
С ошибкой Error 1053 мы уже встречали и успешно ее решали, я описавал эти методы, их можно будет опробовать если эта статья вам не поможет.
При попытке запуска службы через консоль "SQL Server 2022 Configuration Manager", была такая ошибка:
Если зайти в свойства службы и скопировать из нее строку запуска, открыть командную строку от имени администратора и выполнить это там, появляется вот такая ошибка, с нехваткой прав.
Меня тут ожидала ошибка доступа "Access is denied SQLAgent is exiting", которая была настолько неинформативной, что еще раз напоминает мне, что Microsoft есть куда расти. Давайте разбираться, как диагностировать и устранять ошибку "The request failed or the services did not respond in a timely fashion".
Изучение логов при попытке запускать SQL Server Agent
Первое с чего всегда следует начинать, это изучить логи в системы. Откройте логи системы, журнал "Система (System)". Первое на что я обратил внимание, это ошибка с кодом ID 7000:
The service did not respond to the start or control request in a timely fashion.
Далее была ошибка, показывающая, что SQL Server Agent не смог запуститься по-заданному таймингу.
Проверка прав на папку Log
Ошибка "Access is denied SQLAgent is exiting" очень расплывчатая и может вызываться по ряду причин, но будьте уверены, у вашей учетной записи из под которой запускается ваш MS SQL Agent, точно нехватает прав.
- 1️⃣Первое, что вы можете попытаться сделать это запустить MS SQL Agent с определенными ключами, это поможет в некоторых случаях дать вам дополнительную информацию для траблшутинга. Запустите, как я описывал выше cmd от имени администратора и введите команду:
У вас может быть свой путь установки MS SQL. Тут мы переходим в данный каталог.
далее запустите
Приведу описание ключей: -i MSSQLSERVER имя экземпляра указываем в случае необходимости, -c это режим консоли, -v подробный режим. К сожалению, в моем случае, тут не появилось дополнительных ошибок
В некоторых случаях вы можете получить ошибки подобной этой:
В подобного рода ошибках видно, что учетной записи не удается, что-то сделать в папке по указанному выше пути, с высокой долей вероятности, это будет файл SQLAGENT.OUT.
Файл SQLAGENT.OUT в MS SQL Server используется для записи вывода и журнала событий агента SQL Server. Агент SQL Server является службой, которая отвечает за выполнение запланированных заданий, таких как резервное копирование баз данных, выполнение хранимых процедур и отправка уведомлений.
SQLAGENT.OUT содержит информацию о выполнении заданий агента SQL Server, включая успешное выполнение, ошибки и предупреждения. Файл может быть полезен для отслеживания и анализа выполнения заданий, а также для обнаружения проблем или ошибок. Обычно файл SQLAGENT.OUT находится в директории установки SQL Server и может быть просмотрен с помощью текстового редактора или инструментов анализа журналов SQL Server.
Другими словами ваша учетная запись агента SQL Server не может переименовать файл SQLAGENT.OUT в SQLAGENT.1.
- 2️⃣Проверим в ACL присутствует ли данная учетная запись в явном виде или через членство в группе. Для этого выполните код:
$directoryPath = "C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Log"
$acl = Get-Acl -Path $directoryPath
$aceTable = @()
foreach ($ace in $acl.Access) {
$aceTable += [PSCustomObject]@{
Identity = $ace.IdentityReference
FileSystemRights = $ace.FileSystemRights
AccessControlType = $ace.AccessControlType
}
}
$aceTable | Format-Table -AutoSize
У меня права были, поэтому ошибка запуска MS SQL Agent "The request failed or the services did not respond in a timely fashion. Consult the event log or other applicable error logs for details" была не по этой причине.
Если не хотите использовать PowerShell, то можете посмотреть через графический интерфейс, на вкладке "Безопасность".
При отсутствии прав, попытайтесь их выдать и проверить запуск сервиса.
- 3️⃣Если это не помогло, то необходимо проверить правильность записи указывающей в реестре на путь к логам, для этого откройте "Редактор реестра" и перейдите по пути:
или
Удостоверьтесь, что в ключе ErrorLogFile у вас указан верный путь, если это не так, то обязательно поправьте и перезагрузите вашу систему, чтобы настройки вступили в силу.
- 4️⃣Если ошибка доступа сохраняется, то проверьте еще настройки "Dump Directory". Откройте оснастку "SQL Server 2022 Configuration Manager" по пути "C:\Windows\SysWOW64\mmc.exe /32 C:\Windows\SysWOW64\SQLServerManager16.msc". Далее найдите там SQL Server Agent (MSSQLSERVER). Откройте его свойства, на вкладке "Advanced" найдите пункт "Dump Directory" и удостоверьтесь, что там указан правильный путь до папки логов.
Очень часто, тут бывает неправильный путь, после того, когда было перемещение системных баз данных в SQL Server. Не забудьте перезагрузить сервер после внесения изменений.
К сожалению, у меня везде были правильные значения, поэтому я стал копать дальше.
Проверка прав на службу логов в Windows
С появлением Windows Server 2022 были усилены меры безопасности по разным направлениям. Так и я попал на эти нововведения. Существует компонент Event Log Service в Windows и отвечает он за запись и отображение системных событий, происходящих в операционной системе. Event Log Service позволяет отслеживать различные типы событий, такие как ошибки, предупреждения, информационные сообщения и аудиторские записи.
В старых версиях Windows вплоть до Windows Server 2019 существовала проблема, когда эта политика не соблюдалась строго. В результате учетная запись пользователя, которой этой политикой не предоставлен доступ на запись в журнал событий приложения, все равно может записывать в указанный журнал событий. В версиях Windows, выпущенных после Windows Server 2019, эта проблема исправлена. Таким образом, ограничение доступа к журналу событий приложения с помощью этой политики применяется правильно. В нашем случае это привело к тому, что агент SQL Server не запускается на Windows Server 2022.
В моем случае, в декабре как раз внедрялась политика по перенаправлению событий на сервера коллекторы, и в политике GPO эта опция была активирована. После перезагрузки сервера, в момент сервисного обслуживания, политика вступила в свои права и мы получили ошибку запуска агента MS SQL. При запуске службы агент SQL Server вызывает API Windows, чтобы зарегистрировать собственный источник событий в журнале событий приложения, что требует доступа к нему на запись. Поскольку агент SQL Server работает под учетной записью, которой политикой не предоставлен доступ на запись в журнал событий приложений, вызов API завершается неудачно, и агент SQL Server завершает работу из-за ошибки.
- 1️⃣Чтобы проверить, что у вас похожая ситуация, я вам советую открыть командную строку от имени администратора и проверить результирующую политику применяющуюся к системе, где есть ошибка "Access is denied SQLAgent is exiting", для этого введите для создания отчета такую команду:
Она создаст по пути c:\temp\gp.html файл, который можно проанализировать с помощью браузера.
- 2️⃣Далее вам нужно изучить данный отчет по пути:
Тут я увидел текущий состав ACL, что опция активна и какая групповая политика это применила.
- 3️⃣Следующим шагом вам нужно понять, будите вы добавлять в рамках текущей политики SID от группы безопасности Active Directory, куда входит данная учетная запись, от которой запускается агент MS SQL или же просто добавите его SID сюда. Если же вы понимаете, что данная опция вам не нужна в таком явном виде и вы хотите всем у кого есть права на систему разрешать работать со службой "Event Log Service", то можно отключить GPO и перенастроить на локальные настройки. Я покажу вам примеры всех этих шагов.
- 4️⃣Если нужно отключить данную политику, то проверьте через оснастку как она применяется к системе. В моем случае была фильтрация GPO по группе безопасности, я просто удалил учетную запись сервера из группы, чтобы политика не считывалась.
- 5️⃣Теперь, чтобы убрать текущее воздействие, вам нужно принудительно очистить тикет Kerberos и произвести принудительное обновление групповых политик.
- 6️⃣Далее вам необходимо службу MS SQL Agent поставить в отложенный запуск и ОБЯЗАТЕЛЬНО перезагрузить сервер, инача так и будите получать ошибку 1053. После этого у вас все запуститься.
- 7️⃣Если же нужно оставить политику, путем добавления в ACL нужных учетных записей, то вам необходимо через редактор групповой политики открыть вашу GPO по пути:
Далее в поле "Log Access" в самом конце вам нужно добавить SID группы или пользователя, которому нужны необходимые права.
Напомню, что посмотреть SID группы можно вот такой командой:
$group = Get-ADGroup -Filter {Name -eq $groupName}
$groupSID = $group.SID
Write-Output $groupSID
В этом примере мы сначала сохраняем название группы в переменную $groupName. Затем мы используем команду Get-ADGroup для получения объекта группы Active Directory с заданным именем. После этого мы сохраняем SID группы в переменную $groupSID и выводим его на экран с помощью команды Write-Output.
Далее после внесения изменений в политику, ее нужно обновить на нужном хосте, проверив послее ее применения через перезагрузку, старт службы SQL Agent.
Дополнительная информация с помощью ProcessMonitor
Process Monitor (ProcMon) - это утилита для отслеживания активности процессов и операций файловой системы в операционной системе Windows. Она позволяет пользователю видеть все действия, выполняемые программами и системными службами, в режиме реального времени. ProcMon предоставляет подробную информацию о каждой операции, включая имя процесса, имя файла, тип операции, результат операции и многое другое. Это может быть полезно для отладки и анализа проблем с программами, поиска конфликтов или ошибок в системе.
Запускаете Process Monitor, удаляем старые записи через иконку "Корзины", далее нажмите значок пустого квадрата. Заранее откройте оснастку служб
после этого запускаем сбор, заново через значок квадратика. Теперь пробуем несколько раз запустить службу MS SQL Agent, получаем те самые ошибки и останавливаем сбор. Далее сохраняем файл для дальнейшего изучения. По учолчанию он сохранится в папке с утилитой.
Нажмите на значок фильтра. Выберите "Process Name" "is" в качестве процесса SQLAGENT.EXE и "Include". Далее просто "Ok".
В результате у вас останутся событие сгенерируемые только процессом SQLAGENT.EXE, чтобы проще было изучит ьвсе события.
Теперь остается кропотливое изучение строк, где будет указано на отсутствие доступа "Access is denied SQLAgent is exiting".
Как посмотреть и настроить Log Access через PowerShell
Тоже самое можно посмотреть и через PowerShell, сделав запрос в реестр:
$regPath = "HKLM:\SOFTWARE\Policies\Microsoft\Windows\EventLog\Application"
$regValueName = "ChannelAccess"
$value = Get-ItemProperty -Path $regPath -Name $regValueName
$value.ChannelAccess
или
Для добавления нужного SID выполните:
$channelAccess += ",(A;;0x1;;;S-1-5-21-117609710-1390067357-725345543-29616)"
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\EventLog\Application" -Name ChannelAccess -Value $channelAccess
На этом у меня все, надеюсь что вам удалось запустить вашу службу MS SQL Agent и работа восстановлена. С вами был Иван Сёмин, автор и создатель IT портала Pyatilistnik.org.