Клиент Windows Sensu - случайные ошибки "Отказано в доступе" при запуске командных файлов
У нас есть клиент 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. Что мне не хватает??
1 ответ
Это оказалось ошибкой в библиотеке Ruby ChildProcess и тем, как она обрабатывает назначение процесса Windows объекту Job (условие гонки). Я поделюсь исправлением с автором, как только уберу код.