У нас есть клиент Windows Sensu, работающий в нескольких системах 2008 R2. Одна из наших проверок вызывает командный файл для сбора некоторой информации и отчета. Мы время от времени получаем сообщения «Неизвестно: Неожиданная ошибка: Доступ запрещен (5)» для этих проверок - без стандартной частоты, без корреляции ... следующая проверка проходит правильно без проблем.
Я проследил вызов через стек и Код Sensu Ruby) без проблем порождает дочерний процесс cmd.exe / c "/path/to/batch.bat parameters". Я могу воссоздать проблему, удалив весь доступ NTFS к самому командному файлу. Если вы запустите cmd / c batch.bat с удаленными разрешениями, он вернется с той же ошибкой «Доступ запрещен (5)».
Хорошо, отлично, возникают проблемы с доступом к файлу. Зачем? Я запустил трассировку монитора процесса и не нашел абсолютно ничего плохого в процессе: загружается ruby, вызывается cmd.exe, cmd.exe читает файл без видимых ошибок, затем возвращает проверку, поскольку доступ запрещен. Что за...?
У меня нет идей. Дополнительная справочная информация на случай, если это поможет: двоичные файлы Ruby работают как 32-битные; клиент Sensu является последней версией сайта Sensuapp; в системе работает System Center Endpoint Protection. Что мне не хватает ??
Это оказалось ошибкой в библиотеке ChildProcess Ruby и в том, как она обрабатывала назначение процесса Windows объекту Job (состояние гонки). Я поделюсь исправлением с автором, как только почищу код.