Произошла исключительная ситуация ошибка операции администрирования администратор кластера не

  

Mikhail Volkov

02.02.21 — 15:28

Смотрю тему Отключение зависших сеансов  на сервере., у меня выдает: Метод объекта не обнаружен (ОтключитьСеанс)!? Как исправить?

  

Kigo_Kigo

1 — 02.02.21 — 15:35

а режим совместимости какой?

  

fisher

2 — 02.02.21 — 15:37

(1) Это ты так издалека к версии БСП подбираешься? :)

  

Kigo_Kigo

3 — 02.02.21 — 15:38

(2) ога, сам сталкивался с подобным

  

Mikhail Volkov

4 — 02.02.21 — 15:58

(1) Версия 8.2.16, платформа 8.3.10.2466, обычное приложение (не УФ) Альфа-Авто.

  

ДенисЧ

5 — 02.02.21 — 16:39

(4) У тебя там БСП (если она вообще есть) древней египетских пирамид…

  

Deal with it

6 — 02.02.21 — 16:54

Пользуюсь таким примером:

Если Найти(СтрокаСоединенияИнформационнойБазы(), «Srvr») > 0 Тогда

        // серверный вариант

        Поиск1 = Найти(СтрокаСоединенияИнформационнойБазы(), «Srvr=»);

        ПодстрокаПоиска = Сред(СтрокаСоединенияИнформационнойБазы(), Поиск1 + 6);

        ИмяСервера = Лев(ПодстрокаПоиска, Найти(ПодстрокаПоиска, «»»») — 1);

        // теперь ищем имя базы

        Поиск1 = Найти(СтрокаСоединенияИнформационнойБазы(), «Ref=»);

        ПодстрокаПоиска = Сред(СтрокаСоединенияИнформационнойБазы(), Поиск1 + 5);

        ИмяБазы = Лев(ПодстрокаПоиска, Найти(ПодстрокаПоиска, «»»») — 1);

    Иначе

        // для других способов подключения алгоритм не актуален

        Возврат;

    КонецЕсли;

    

    МассивИсключений = Новый Массив;

    МассивИнденксов = Новый Массив;

    

    Для Каждого Стр Из Исключения Цикл

        МассивИсключений.Добавить(Стр.Значение.Наименование);

    КонецЦикла;

    

    Коннектор = Новый COMОбъект(«v83.COMConnector.1»);

    //Сообщить(«СОМ объект успешно получен»);//////////////////

    Агент = Коннектор.ConnectAgent(ИмяСервера);

    //Сообщить(«Агент сервера успешно получен»); ////////////////////

    Кластеры = Агент.GetClusters();

    Для каждого Кластер из Кластеры Цикл

        АдминистраторКластера = «admins»;

        ПарольКластера = «E8vbteud»;

        Агент.Authenticate(Кластер, АдминистраторКластера, ПарольКластера);

        //Сообщить(«Утентификация сервера успешно получена»); ////////////////////

        Процессы = Агент.GetWorkingProcesses(Кластер);

        Для каждого Процесс из Процессы Цикл

            Порт = Процесс.MainPort;

            // теперь есть адрес и порт для подключения к рабочему процессу

            РабПроц = Коннектор.ConnectWorkingProcess(ИмяСервера + «:» + СтрЗаменить(Порт, Символы.НПП, «»));

            РабПроц.AddAuthentication(«Admin», «4615426»);

            
            //Сообщить(«Утентификация рабочего процесса успешно выполнена»); ////////////////////

            
            ИнформационнаяБаза = «»;

            

            Базы = Агент.GetInfoBases(Кластер);

            Для каждого База из Базы Цикл

                Если База.Name = ИмяБазы Тогда

                    ИнформационнаяБаза = База;  

                    //Сообщить(ИнформационнаяБаза);/////////////

                    Прервать;

                КонецЕсли;

            КонецЦикла;

            Если ИнформационнаяБаза = «» Тогда

                // база не найдена

            КонецЕсли;

            

            Сеансы = Агент.GetInfoBaseSessions(Кластер, ИнформационнаяБаза);

            Для каждого Сеанс из Сеансы Цикл

                

                Если нРег(Сеанс.AppID) = «backgroundjob» ИЛИ нРег(Сеанс.AppID) = «designer» Или  нРег(Сеанс.AppID) = «SrvrConsole»Тогда

                    // если это сеансы конфигуратора или фонового задания, то не отключаем

                    Продолжить;

                КонецЕсли;

                Если Сеанс.UserName = ИмяПользователя() Тогда

                    // это текущий пользователь

                    Продолжить;

                КонецЕсли;

                Если МассивИсключений.Найти(Сеанс.UserName) = Неопределено Тогда  

                    а=0;        

                    //Сообщить(Сеанс.UserName);/////////////

                    Агент.TerminateSession(Кластер, Сеанс);

                КонецЕсли;

                
            КонецЦикла;

            

            ИнформационнаяБаза2 = РабПроц.CreateInfoBaseInfo();

            ИнформационнаяБаза2.Name = ИмяБазы;

            СоединенияБазы = РабПроц.GetInfoBaseConnections(ИнформационнаяБаза2);

            

            //СоединенияБазы = Агент.GetInfoBaseConnections(Кластер, ИнформационнаяБаза);

            // Разорвать соединения клиентских приложений.

            Для Каждого Соединение Из СоединенияБазы Цикл

                

                Если нРег(Соединение.AppID) = «backgroundjob»

                    Или  нРег(Соединение.AppID) = «designer»

                    Или нРег(Соединение.AppID) = «SrvrConsole»

                    Или нРег(Соединение.AppID) = «COMConsole»

                    Или  нРег(Соединение.AppID) = «SystemBackgroundJob» Тогда

                    

                    // если это соединение конфигуратора или фонового задания, то не отключаем

                    Продолжить;

                КонецЕсли;

                

                Если Соединение.UserName = ИмяПользователя() Тогда

                    // это текущий пользователь

                    Продолжить;

                КонецЕсли;

                

                Если МассивИсключений.Найти(Соединение.UserName) = Неопределено Тогда

                    // это текущий пользователь

                    а=0;

                    //Сообщить(Соединение.UserName);/////////////

                    РабПроц.Disconnect(Соединение);

                КонецЕсли;                

            КонецЦикла;

        КонецЦикла;

    КонецЦикла;

  

Deal with it

7 — 02.02.21 — 16:55

+(6) плюс на форме обработки у меня список значений, куда добавляю пользователей, которых не завершать, т.е. исключения.

  

Mikhail Volkov

8 — 02.02.21 — 17:18

(6) Вообще-то мне надо закрыть конфигуратор (и желательно фоновые задания) по завершению работы последнего пользователя в базе…

  

Deal with it

9 — 02.02.21 — 17:21

(8) ну так уберите из кода эти условия, и завершать будет вообще все сеансы и подключения к базе.

Типа такие условия: нРег(Сеанс.AppID) = «backgroundjob».

  

Deal with it

10 — 02.02.21 — 17:23

+(9) код рабочий, если ком обьект v83.COMConnector.1 (или как он у вас назван в службе компонентов) зарегистрирован в системе, это важно.

  

Deal with it

11 — 02.02.21 — 17:24

Разумеется в исключение надо поставить текущий сеанс, под которым вы запускаете обработку))) ну, на всякий случай уточняю

  

Mikhail Volkov

12 — 02.02.21 — 17:55

(10) Мне бы попроще, без «ком обьект v83.COMConnector.1 (или как он у вас назван в службе компонентов)»

Есть у меня функция для предупреждения пользователя, если кассовая смена не закрыта:

Функция ПоследнийПользовательБазы(КопияИБ = Истина) Экспорт

    Если КопияИБ И КопияИнформационнойБазы() Тогда

        Возврат Ложь;

    КонецЕсли;

    СоединенияИнформационнойБазы = ПолучитьСоединенияИнформационнойБазы();

    Если СоединенияИнформационнойБазы.Количество() = 1 Тогда

        Возврат Истина;

    КонецЕсли;

    Количество = 0;

    Для Каждого Соединение Из СоединенияИнформационнойБазы Цикл

        Если ПредставлениеПриложения(Соединение.ИмяПриложения) = «Конфигуратор» Тогда

            Продолжить;

        КонецЕсли;

        Количество = Количество + 1;

    КонецЦикла;

    Возврат Количество = 1;

КонецФункции // ПоследнийПользовательБазы()

Как отключить сеанс, если ПредставлениеПриложения(Соединение.ИмяПриложения) = «Конфигуратор»?

  

Deal with it

13 — 02.02.21 — 18:32

(12) не вижу как она предупреждает, и зачем строка «Количество = Количество + 1;» если вы все равно возвращаете «Количество = 1;»?

  

Kesim

14 — 02.02.21 — 18:46

(13) Возврат Количество = 1; — возвращает булево (типа: это последний пользователь вне конфигуратора? истина/ложь)

  

Mikhail Volkov

15 — 02.02.21 — 18:51

(13) Функцию (12) лишь привел для того, что могу получить все СоединенияИнформационнойБазы, найти нужное, его НомерСеанса. А как правильно его ОтключитьСеанс — не знаю?

  

Mikhail Volkov

16 — 03.02.21 — 07:26

(14) > типа: это последний пользователь вне конфигуратора?

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

(13) А для чего этот пример, по отключению зависших сеансов? Непосредственное отключение: РабПроц.Disconnect(Соединение);? Долгий путь к РабПроц, через Коннектор = Новый COMОбъект(«v83.COMConnector.1»);

Смотрю обработку Поиск и отключение зависших сеансов на сервере 1С (http://catalog.mista.ru/public/548893/), в ней тоже подобное, через СоединениеСАгентом.TerminateSession(РабочийКластер,ТекСеанс); Попроще нельзя?

  

Mikhail Volkov

17 — 03.02.21 — 08:15

(13) Нашел откуда пример (6), из Программное отключение сеансов 1С 8.2 (http://catalog.mista.ru/1c/articles/77671/). Только не понял: РабПроц.Disconnect(Соединение); делать обязательно, не достаточно Агент.TerminateSession(Кластер, Сеанс);? (в обработке http://catalog.mista.ru/public/548893/ нет Disconnect(Соединение))

  

John83

18 — 03.02.21 — 08:45

(0) это из УПП 1.3

  

Mikhail Volkov

19 — 03.02.21 — 10:38

(18) Ага, обработка АктивныеПользователи процедура ЗавершитьСеанс(Команда), но там откуда?

  

Deal with it

20 — 03.02.21 — 10:53

(17) завершить сеанс не равно отключить соединение. Есть ситуации, когда сеанс завершен некорректно и подключение зависает или дублируется. Агент сервера вроде как должен сам завершать зависшие подключения, но лишь по истечению какого-то времени, мы же говорим о сиюминутном завершении всех сеансов и подключений.

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

  

Mikhail Volkov

21 — 03.02.21 — 12:01

(18)+ Запустил УПП в режиме отладки, посмотреть как выполняется процедура ЗавершитьСеанс(Команда), открыл обработку АктивныеПользователи. В ней даже кнопки нет Завершить сеанс!?

(20) В твоем примере (6):

        АдминистраторКластера = «admins»;

        ПарольКластера = «E8vbteud»;

У меня: Ошибка при вызове метода контекста (Authenticate): Произошла исключительная ситуация: Ошибка операции администрирования. Администратор кластера не аутентифицирован. Где их брать, в консоле администрирования? АдминистраторКластера взял, а пароль не помню, пустой не подходит. Как посмотреть пароль?

  

Deal with it

22 — 03.02.21 — 12:55

(21) ну так пропишите своего админа кластера и пароль.

Я вам дал инструмент, ваше дело как им распоряжаться. Гугл вам в помошь

  

Mikhail Volkov

23 — 03.02.21 — 13:50

(22) Галочка стояла Аутентификация ОС — поэтому не помню, поставил новый пароль 1С — заработало. За основу взял , тоже громоздко, но не так (6):

Процедура ОтключениеКонфигуратора(Отказ) Экспорт

    Соединитель = Новый COMОбъект(«V83.COMConnector»);

    Кластер = Сред(СтрокаСоединенияИнформационнойБазы(), 7, Найти(СтрокаСоединенияИнформационнойБазы(), «;Ref=») — 8);    // «andromeda:1641»;

    ИмяБазы = Сред(СтрокаСоединенияИнформационнойБазы(), Найти(СтрокаСоединенияИнформационнойБазы(), «;Ref=») + 6, СтрДлина(СтрокаСоединенияИнформационнойБазы()) — Найти(СтрокаСоединенияИнформационнойБазы(), «;Ref=») — 7);    // «PatrERP»;

    ПериодичностьПроверки = 8;

    СтрокаСоединения = «TCP://» + Кластер;

    АдминистраторКластера = «»;

    ПарольАдминистратора  = СвязьКА.ПарольКонсольАдминистратор(АдминистраторКластера);

    Попытка

        // попытка соединения с центральным сервером

        СоединениеСАгентом = Соединитель.ConnectAgent(СтрокаСоединения);

        РабочийКластер = СоединениеСАгентом.GetClusters().GetValue(0);

        СоединениеСАгентом.Authenticate(РабочийКластер, АдминистраторКластера, ПарольАдминистратора);

        ИБ = СоединениеСАгентом.GetInfoBases(РабочийКластер);

        Для Каждого СтрИБ Из ИБ Цикл

            Если СтрИБ.Name = ИмяБазы Тогда

                ТекущаяИБ = СтрИБ;

                СеансыИБ  = СоединениеСАгентом.GetInfoBaseSessions(РабочийКластер,ТекущаяИБ);

                

                //Проверяем наличие сеанса пользователя, кроме 1CV8 — толстого клиента

                Для Каждого ТекСеанс Из СеансыИБ Цикл

                    Если ТекСеанс.AppID = «1CV8» Тогда

                        Продолжить;

                    КонецЕсли;

                    ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени(ТекСеанс.userName);

                    СоединениеСАгентом.TerminateSession(РабочийКластер, ТекСеанс);

                //    Если ТекСеанс.dbProcTook > Цел(ПериодичностьПроверки*60*1000) Тогда //в мс.

                //        Сообщить(«Зависший сеанс у пользователя: » + ТекСеанс.userName + «, компьютер: » + ТекСеанс.Host);

                //    КонецЕсли;    

                //    Если ТекСеанс.connection = Неопределено Тогда

                //        Сообщить(«Пользователь: » + ТекСеанс.userName + «, компьютер: » + ТекСеанс.Host + «, аварийно завершил сеанс»);

                //    КонецЕсли;

                //    Сообщить(» ->>> Сеанс пользователя: » + ТекСеанс.userName + «, приложение: » + ТекСеанс.AppID + «, компьютер: » + ТекСеанс.Host + «, отключен » + ТекущаяДата());    

                КонецЦикла;    

                Прервать;    // Только для указанной информационной базы

            КонецЕсли;

        КонецЦикла;

    Исключение

        Отказ = Истина;

        Сообщить(«Не удалось завершить сеанс конфигуратора » + ТекущаяДата() + «; » + ОписаниеОшибки(), СтатусСообщения.Внимание);    

    КонецПопытки;

КонецПроцедуры // ОтключениеКонфигуратора()

Правда по завершению выскакивает предупреждение, что сеанс завершен администратором с вопросом: Перезапустить или Завершить работу. Как бы его убрать? Интересно, это мешает?

  

Mikhail Volkov

24 — 03.02.21 — 14:37

+ Вроде не мешает, dt-выгрузка делается запущенным из 1С bat-файлом.

  

Mikhail Volkov

25 — 03.02.21 — 14:57

(19)+ СоединенияИБКлиентСервер — это общий модуль, еще используется общий модуль СоединенияИБ и другие для ОтключитьСеанс(). В Альфа-Авто их нет, не стал разбираться…

  

Mikhail Volkov

26 — 03.02.21 — 15:26

Вопрос не по теме, в bat-файле имя файла dt-выгрузки формируется: set «BakName=f:workspace1C1с_АрхивыAAAAkitAAAAkit_%date:~0,2%%date:~3,2%%date:~6,4%.dt». Но работа 1С может задержаться, завершиться после полуночи. Как бы мне BakName сформировать по вчерашней дате? Ведь в месяцах разное число дней.

  

Mikhail Volkov

27 — 09.02.21 — 06:21

(6) Этот алгоритм может определить какой сеанс из 1CV8 (толстого клиента) является зависшим? Или другой метод по СоединенияИнформационнойБазы = ПолучитьСоединенияИнформационнойБазы();?

Свойства:

ИмяКомпьютера (ComputerName)

ИмяПриложения (ApplicationName)

НачалоСоединения (ConnectionStarted)

НомерСеанса (SessionNumber)

НомерСоединения (ConnectionNumber)

Пользователь (User)

  

SiAl-chel

28 — 09.02.21 — 06:27

(26)

1. Выгружать базу в файл с произвольным именем.

2. После пакетного запуска в скрипте ожидать появления этого ненулевого файла.

3. После выгрузки формировать имя файла по дате и времени.

4. Переименовать файл с произвольным именем в файл с нужным именем из шага 3.

  

Mikhail Volkov

29 — 09.02.21 — 07:11

(28) Наверное не точно задал вопрос (26), поясняю: обычно ночная выгрузки делается после 21 часа, когда все пользователи вышли из базы. Но бывает срочная работа, или пользователь неправильно вышел (только из терминала, но не из базы), или просто забыл выйти. С 21 часа включается принудительный мягкий выход, задается вопрос пользователю, но пользователь может отказаться выйти. Тогда принудительный мягкий выход откладывается на час. Через час ситуация может повториться… и через 2, 3, сейчас этот алгоритм работает до полуночи (пока более длительных задержек не было). Хотелось бы, чтобы этот алгоритм мог работать до утра (начала следующего рабочего дня). Но имя файла dt-выгрузки после полуночи сформировалось по вчерашней дате!?

  

Mikhail Volkov

30 — 09.02.21 — 12:48

(27)+ Наверное нет. Тогда тот же алгоритм (23) по условию: Если ТекСеанс.dbProcTook > Цел(ПериодичностьПроверки*60*1000) Тогда //в мс.

  

SiAl-chel

31 — 09.02.21 — 12:54

(29) Ваще плевать с каким именем он сформировался. Делай выгрузки с рандомным именем, а потом другим заданием с нужной тебе регулярностью проверяй, чтобы имя файла соответствовало дате и времени изменения (или создания) файла, если нет, то тогда переименовывай файл.

  

Mikhail Volkov

32 — 09.02.21 — 13:05

(31) По существованию файла с именем по дате как раз принимается решение: делать ли завершение сеансов и dt-выгрузку, или нет.

  

Mikhail Volkov

33 — 09.02.21 — 15:05

Вроде нашел https://www.sql.ru/forum/445183/kak-poluchit-vcherashnee-chislo-v-bat-fayle ужас какой!? Неужели у bat-файлов нет функции вчерашний даты? Если текущий час больше 6 часов, то имя файла BakName формируется по сегодняшней дате (26). Если нет (после полуночи), то по вчерашней.

  

SiAl-chel

34 — 09.02.21 — 21:10

(33) Бат-файлы это — не язык программирования, это скриптовый язык. В нем есть ровно то, что могут консольные команды ОС и стороннего софта.

Определение вчерашних дат взято вот отсюда https://www.sql.ru/forum/445183/kak-poluchit-vcherashnee-chislo-v-bat-fayle

set /A CalculatePreviousDay=1%Day%-1

set Yesterday=%CalculatePreviousDay:~1,2%

set PreviousDate=%Year%%Month%%Yesterday%

  

Mikhail Volkov

35 — 10.02.21 — 06:48

(34) Это лишь фрагмент замены: «иначе будут проблемы на числах 08 и 09…», а сам код еще строк 60… советуют получать вчерашнюю дату через PowerShell (здесь вряд ли помогут). Спс всем.

  

Mikhail Volkov

36 — 10.02.21 — 15:21

  

Mikhail Volkov

37 — 13.03.21 — 08:12

А как создать некое событие для Windows, в 1С это возможно?

Бат-файл запущенный из 1С не всегда выполняется до конца, иногда его выполнение прерывается (ход выполнения пишется в лог-файл). Потому, что он запущен под конкретным пользователем 1С. А этот пользователь (подозреваю) завершил работу, и вышел из терминала. Решил выполнять bat-файл под системной учетной записью: СИСТЕМА или USR1CV8. Для этого в планировщике заданий создал свое с моим bat-файлом. Из 1С это задание запускаю ЗапуститьПриложение(«schtasks /run /tn имя_задачи_в_планировщике»); Справка SchTasks /? дает описание:

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

Примеры:

    SCHTASKS /Run /?

    SCHTASKS /Run /TN «АрхивацияНачать архивацию»

    SCHTASKS /Run /S <система> /U <пользователь> /P <пароль> /I

         /TN «АрхивацияАрхивация и восстановление»

Подомною все прекрасно сработало, а под рядовым пользователем — ничего!? Выходит выполнять задачу (в справке прямо ни сказано) можно только администратору? Поэтому решил в 1С создать некое событие для Windows, а которое реагировало бы мое задание в планировщике. Возможно? (никогда не делал)

  

Mikhail Volkov

38 — 13.03.21 — 13:47

Вроде нашел, но: Команда eventcreate позволяет администратору создать запись об особом событии в указанном журнале событий

т.е. не рядовому пользователю, а только администратору.

Смотрю журнал событий Windows Безопасность, в нем такие события: Вход с учетной записью выполнен успешно, Выполнен выход учетной записи из системы… А вход/выход пользователей из базы 1С, или что другое связанное 1С пишется в журнал событий Windows? Или можно настроить чтоб писалось?

  

Mikhail Volkov

39 — 16.03.21 — 13:14

1С что-то пишет в журнал событий Windows? Или можно настроить чтоб писалось?

  

Mikhail Volkov

40 — 16.03.21 — 16:14

А можно ли заставить 1С сделать что-то «нехорошее» (обычно не делается, но без последствий), что обязательно запишется в журнал событий Windows?

  

Kassern

41 — 16.03.21 — 16:21

(40) а накой лезти в журнал событий винды? Чем тебя не устравивает писать какой нить файл — флаг для этих нужд?

  

Mikhail Volkov

42 — 16.03.21 — 17:10

(41) Есть такой флаг: при завершении сеанса последнего пользователя очищается лог-файл Как создать пустой текстовый файл из 1С Потом еще: при завершении сеанса последнего пользователя запускается нужный bat-файл, который выполняет все что нужно. Но не всегда: bat-файл запускается под учетной записью последнего пользователя. Если он завершает свой терминальный сеанс, то выполнение bat-файла прерывается. А запустить bat-файл планировщиком заданий командой: ЗапуститьПриложение(«schtasks /run /tn имя_задачи_в_планировщике»); не доступно рядовому пользователю, только администраторам. Запуск задания по расписанию сейчас делается в конце ночи (в 6 утра) в случае его не выполнения, но хотелось бы чтобы сразу выполнялось.

  

Kassern

43 — 16.03.21 — 17:26

(42) каша какая то получается…Зачем запускать бат файл под учеткой последнего пользователя? Все пользователи вышли, создаешь флаг, что можно делать выгрузку. в шедулере можешь хоть каждые 5 минут проверять наличие файла флага, если он существует то запускать выгрузку чего тебе там надо, после выгрузки этот файл флаг удаляется.

  

Mikhail Volkov

44 — 16.03.21 — 17:34

(43) Это 1-й вариант, а 2-й (39)?

  

Mikhail Volkov

45 — 17.03.21 — 06:47

Нашел ответ на 1-й вопрос (39), настроил фильтр журнала событий Windows, отбирающего строки с ошибками и зависаниями, вызванными программой 1С по статье: https://infostart.ru/1c/articles/190790/. В отборе есть события, например, Программа 1cv8.exe версии 8.3.10.2466 прекратила взаимодействие с Windows и была закрыта — это событие Ошибка. Интересно, есть ли в журнале события о нормальном завершении 1С. Наверное нет… а как сделать чтобы были?

  

Mikhail Volkov

46 — 17.03.21 — 12:00

Вроде убрал все лишнее из фильтра, оставил:

<QueryList>

  <Query Id=»0″ Path=»Application»>

    <Select Path=»Application»>

    *[EventData[(Data=’1cv8.exe’)]]

    </Select>

  </Query>

</QueryList>

Теперь в журнале событий вижу не только Ошибки от источников Application Error и Application Hang, но и Сведения от Windows Error Reporting. А события запуска/остановки 1С не вижу!? Фильтр неправильно настроен, или события запуска/остановки 1С в журнале не фиксируются?

  

Kassern

47 — 17.03.21 — 12:07

(46) У тебя все пользователи терминально работают?

  

Mikhail Volkov

48 — 17.03.21 — 13:32

(47) Да, завершение терминального сеанса фиксируется в журнале событий. Но не всегда пользователи сами его завершают. Иногда просто «выпадают» из терминала.

  

Mikhail Volkov

49 — 18.03.21 — 10:11

> А можно ли заставить 1С сделать что-то «нехорошее» (обычно не делается, но без последствий), что обязательно запишется в журнал событий Windows? (40)

Послал сообщение командой MSG, и оно зафиксировалось в журнале событий Windows! Имя журнала: Система, Источник: Application Popup, Уровень: Сведения, Код события: 26, Ключевые слова: Классический. По нему можно запускать свое задание под системой учетной записью. Вот только бы не перепутать его с другими событиями… На вкладке Триггеры по кнопке Изменить фильтр событий… создал фильтр XML:

<QueryList>

  <Query Id=»0″ Path=»System»>

    <Select Path=»System»>*[System[Provider[@Name=’Application Popup’] and (Computer=’PERSEUS.corp.akit’) and (Level=4 or Level=0) and (band(Keywords,36028797018963968)) and (EventID=26)]]</Select>

  </Query>

</QueryList>

Как в него вставить текст сообщения? https://ibb.co/N1D7tzN (Если получится, текст сообщения будет другой).

  

Mikhail Volkov

50 — 19.03.21 — 07:13

Может Использовать другую крайне редко используемую команду (какую?), чтобы она зафиксировалось в журнале событий Windows? (желательно без имени пользователя)

  

Mikhail Volkov

51 — 23.03.21 — 11:25

Если сообщение командой MSG (всем или конкретному пользователю) послано, когда нет активных сеансов (или конкретного пользователя) на сервере-терминале, оно не фиксируется в журнале событий Windows?

  

mistеr

52 — 23.03.21 — 12:07

Жесть, сколько садо-мазо стоя в гамаке, вместо того, чтобы настроить нормальные бэкапы.

  

Kassern

53 — 23.03.21 — 12:12

(52) мне кажется, что это еще не предел)

  

Mikhail Volkov

54 — 23.03.21 — 12:43

(52) Бэкапы настроены, делаются на SQL-сервере. Но были случаи его выхода из строя. Это дополнительно…

Секцию темы на IT/Админ сменить можно? А то ее только 1С-ники видят…

  

mistеr

55 — 23.03.21 — 13:38

(54) >Но были случаи его выхода из строя.

Настоящий бэкап защищает и от этого.

  

Mikhail Volkov

56 — 23.03.21 — 14:15

(55) SQL-бэкап возможно был, но восстановить из него файловый вариант базы не получилось.

  

Kassern

57 — 23.03.21 — 14:16

(56) вот в этом направлении и нужно было копать и автоматизировать, а не забить и параллельно запустить дт бекапы

  

Kassern

58 — 23.03.21 — 14:16

(56) разобрались почему не получилось восстановить бекап?

  

mistеr

59 — 23.03.21 — 14:18

(56) Из скульного бэкапа пытались получить файловую базу? Да вы там шутники однако.

  

Mikhail Volkov

60 — 24.03.21 — 09:01

  

  

Mikhail Volkov

61 — 09.09.21 — 10:57

При завершении работы пользователя выполняется предопределенная процедура ПередЗавершениемРаботыСистемы(). В ней проверяется последний ли пользователь. Если последний, то запускается bat-файл архивации. Но замечено что иногда последнему как-то удается завершить свою работу в Альфа-Авто и терминале (обычно это кассир завершает свою работу не с рабочего компьютера, а с домашнего) минуя эту предопределенную процедуру, и bat-файл не выполняется. Хотя в журнале регистрации есть запись события: Сеанс. Завершение.

Не пойму как такое возможно?

  

Mikhail Volkov

62 — 09.09.21 — 14:29

Может пользователь завершил терминальный сеанс не закрыв Альфа-Авто, она завершилась аварийно?

  

Mikhail Volkov

63 — 14.09.21 — 10:51

Для RDP ведется какой ни будь журнал регистрации подобный ЖР 1С, можно посмотреть когда начат сеанс RDP пользователем: состояние Активно/Отключено, а когда он вышел: не показывает состояние? Как?

  

ildary

64 — 14.09.21 — 15:23

(63) погуглите «Журнал событий Windows»

  

Mikhail Volkov

65 — 14.09.21 — 17:25

(64) Ссылок на проконтролировать вход по RDP много, а на проконтролировать выход из RDP не нашел. Хочется знать всегда ли выполняется предопределенная процедура ПриЗавершенииРаботыСистемы(), даже при аварийном завершении 1С, при закрытии сеанса RDP?

  

Mikhail Volkov

66 — 16.09.21 — 08:40

Например вчера 15.09.2021 20:34:37 по ЖР 1С есть запись Сеанс. Завершение. В журнале Безопасность этому пользователю соответствуют две записи категории «Выход из системы»:

15.09.2021 20:34:31 код события: 4647 Данное событие возникает, когда выход начат. Дальнейшие действия, запрошенные пользователем, не выполняются.  Данное событие можно рассматривать как событие выхода.

15.09.2021 20:35:07 код события: 4634 Данное событие возникает при уничтожении сеанса входа. Его можно однозначно связать с событием входа с помощью значения «Код входа». Коды входа остаются уникальными после перезагрузки, но они уникальны только на одном компьютере. Тип входа: 3

В чем некорректность выхода: можно определить?

  

mistеr

67 — 16.09.21 — 11:11

(61) >В ней проверяется последний ли пользователь.

Ставлю на то, что проверка кривая.

  

mistеr

68 — 16.09.21 — 11:12

У меня в одном месте сделано так. Проверка в самом bat файле, что нет активных сеансов, и если есть, то архивация не выполняется.

  

Mikhail Volkov

69 — 16.09.21 — 12:24

(68) Пожалуйста, выложи текст этой проверки!?

Разобрался, при закрытии сеанса RDP предопределенная процедура ПриЗавершенииРаботыСистемы() не выполняется. Но запись в ЖР Сеанс. Завершение делается. Где, как отловить это событие в 1С?

  

mistеr

70 — 16.09.21 — 13:38

(69) Там файловая, просто проверяется наличие lock-файлов в папке с базой.

  

Mikhail Volkov

71 — 17.09.21 — 09:23

(70) Для SQL-базы это не пойдет.

Но запись в ЖР Сеанс. Завершение делается. Где, на уровне платформы? Конфигуратором туда не добраться?

Еще заметил, что перед каждой записью в ЖР Сеанс. Завершение делается более 3-х записей событий: Данные. Изменение в Регистр сведений. Значения свойств объектов. Каких объектов, какие свойства неизвестно. Можно как-то под настроить ЖР, чтобы знать что за объекты?

  

Mikhail Volkov

72 — 18.09.21 — 09:58

Выяснил в Регистр сведений. Значения свойств объектов пишется свойства оборудования — кассы при завершении работы пользователя, вызывается в конечном счете из предопределенной процедуры ПриЗавершенииРаботыСистемы().

  

Mikhail Volkov

73 — 20.09.21 — 09:15

Обычно жалуются, что Активные пользователи в 1С остаются после отключение пользователя от RDP. У меня такой проблемы нет. Но в теме https://1s-forum.fun/showthread.php/201142-Активные-пользователи-в-1С-остаются-после-отключение-пользователя-от-RDP дан совет: «укажите в свойствах РДП — не отключение сеанса — а завершение, с переопределением пользовательских настроек». Мне бы наоборот, только где конкретно в свойствах RDP?

  

SiAl-chel

74 — 20.09.21 — 11:56

(73) Версию Windows Server озвучь.

  

Mikhail Volkov

75 — 20.09.21 — 12:31

(74) 2008R2

  

Mikhail Volkov

76 — 22.09.21 — 17:01

https://pro1c.org.ua/index.php?showtopic=26358 «Пуск» — «Все программы»-«Администрирование»-«Настройка служб терминалов» — нет у меня на сервере терминалов!?

И «Пуск» — «Выполнить»- «%SystemRoot%system32tscc.msc /s» — не удается найти tscc.msc?

  

Mikhail Volkov

77 — 26.09.21 — 13:03

В bat-файле для получения dt-выгрузки базы прописана строка:

«C:Program Files (x86)1cv88.3.10.2466bin1cv8s.exe» DESIGNER /S «Сервербаза» /N»Администратор» /P»Пароль» /DumpIB %BakName% /Out %LogName% -NoTruncate /DisableStartupMessages /UC AllowRobotLogon

Он запускается заданием, которое обычно запускается из 1С при завершении работы последнего пользователя из предопределенной процедуры ПриЗавершенииРаботыСистемы(). Перед его запуском в 1С проверяется: открыт ли конфигуратор, если он открыт, то он закрывается процедурой (23).

А есть ли другой способ закрыть конфигуратор? Вроде встречал команду для командной строки, выгоняющую всех пользователей из базы. Она закрывает конфигуратор, если он открыт? Или есть команда проверяющая открыт ли конфигуратор, или кто-то есть в базе (в серверной SQL)?

Ошибка при копировании файла в W:basemybase_xxxxx.dt Системе не удается найти указанный путь.
В данном случае, в качестве конечной папки указан сетевой диск, который подключается при входе пользователя в систему. Если агент efsaver запускается как служба, он не «видит» этого диска.
Измените путь к сетевой папке к виду полного сетевого пути, например: archivbase


Ошибка при копировании файла в archivbase mybase_xxxxx.dt Системе не удается найти указанный путь.
Проблема, как правило, связана с правами пользователя на доступ к сетевой папке. Права нужно смотреть того пользователя, который используется запуска службы. Например, агент efsaver запущенный как служба с системной учетной записью SYSTEM не имеет прав на сетевые ресурсы.


При попытке запуска агента как службы появляется окно ошибки «Указанная служба не установлена» или «could not open policy».
Вероятно инсталляцию службы блокирует компонент Windows UAC (User Account Control). Запустите менеджер с повышением прав до администратора. Для этого сделайте правый клик мышкой на ярлыке менеджера и выберите пункт меню «Запустить от имени администратора».


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


Восстановление пароля для доступа к «Менеджеру».
Вам необходимо прислать на почту файл с данными программы esdata.db.
Все настройки/данные программы находятся в файле esdata.db. Файл расположен по следующему пути:

Если используете Effector Saver 3
Windows XP, Windows server 2003
C:Documents and SettingsAll UsersApplication DataEffector Saver 3esdata.db
Windows 7/10, Windows server 2008/2012
C:ProgramDataEffector Saver 3esdata.db

Если используете Effector Saver 4
Windows XP, Windows server 2003
C:Documents and SettingsAll UsersApplication DataEffector Saveresdata.db
Windows 7/8, Windows server 2008/2012
C:ProgramDataEffector Saveresdata.db

Перед копированием файла остановите службу efsaver и удалите процессы через диспетчер задач (по крайней мере те, которые присутствуют)
fagent.exe
fmanager.exe
fmonitor.exe


Архивирование средствами 1С:Предприятие 7.7 ошибка «Out of memory».
Вероятно одновременно запускается более 2-х задач Архивирование средствами 1С:Предприятие 7.7. В настройках программы установите «Разрешить одновременную работу потоков задач» в значение не больше 2.


Ошибка отключения пользователей базы 1С, Библиотека не зарегистрирована
Ошибка отключения пользователей базы 1С:. Недопустимая строка с указанием класса
Ошибка отключения пользователей базы 1С, Различаются версии клиента и сервера (8.3.7.2027 — 8.3.8.2197), клиентское приложение: COM-администратор
Ошибка отключения пользователей базы 1С, Не найден указанный модуль, ProgID: «V83.ComConnector»
Как правило, появляется после установки новой версии ядра 1С:Предприятия.
Решение — зарегистрируйте на компьютере библиотеку comcntr.dll.
О том как зарегистрировать библиотеку, здесь


Ошибка отключения пользователей базы 1С, Ошибка операции администрирования Администратор кластера не аутентифицирован
Установите флаг «Кластер требует авторизации» если в кластере 1С:Предприятия создан пользователь «администратор кластера», заполните имя и пароль.
Важно: не путайте данного пользователя с пользователем базы 1С:Предприятия и пользователем «администратор центрального сервера».
В консоли сервера 1С:Предприятия администраторы кластера находятся по следующему пути: «Console Root» — «1C:Enterprise 8.3 Central Servers» — «(*)имя компьютера» — «Кластеры» — «Локальный кластер» — «Администраторы».


Could not open data connection to port xxxxx: Connection timed out.
Может происходить в задаче «Дополнительное копирование» при передаче файла на FTP сервер. Исправляется в настройке подключения к FTP серверу, установкой флага «Пассивный режим».


Задача запускается, появляется в активных задачах, но архив не создает.
Как правило, это происходит если в настройках задачи указан не верный логин или пароль пользователя подключения к 1С.
Перезапустите агент как приложение, что бы увидеть запускаемые окна 1С в контексте Вашего рабочего стола. Выполните задачу вручную. Если откроется окно авторизации 1С, значит неверный логин или пароль.


При выходе очередного релиза платформы 8.2 приходиться перевыбирать исполняемый файл на новый релиз.
В настройках каждой задачи, в поле «Исполняемый файл:» укажите вариант «1C:Предприятие 8.2 последний установленный релиз». После этого, агент efsaver будет автоматически использовать максимальный релиз 1С 8.2.


Задача завершается с ошибкой «Запрос прекращения выполнения задачи (допустимое время выполнения вышло)».
Проверьте допустимое время выполнения задачи на закладке «Завершение».
Не верно указан логин или пароль подключения к 1С. Задача «зависает» на этапе авторизации 1С все отведенное ей время. Смотрите решение «Задача запускается, появляется в активных задачах, но архив не создает».


Как обновить Effector Saver до последней версии с сохранением текущих задач и настроек?
О том как обновить Effector Saver 3, здесь
О том как обновить Effector Saver 4, здесь
О том как перейти с Effector Saver 3 до версии 4, здесь


Как перенести настройки программы на другой компьютер? Как сохранить настройки если необходимо переустановить OS?
Все настройки/данные программы находятся в файле esdata.db. Файл расположен по следующему пути:

Если используете Effector Saver 3
Windows XP, Windows server 2003
C:Documents and SettingsAll UsersApplication DataEffector Saver 3esdata.db
Windows 7/10, Windows server 2008/2012
C:ProgramDataEffector Saver 3esdata.db

Если используете Effector Saver 4
Windows XP, Windows server 2003
C:Documents and SettingsAll UsersApplication DataEffector Saveresdata.db
Windows 7/10, Windows server 2008/2012
C:ProgramDataEffector Saveresdata.db

После установки программы на новом компьютере, замените этот файл на «старый».
Обратите внимание: версии программ, на старом компьютере и на новом, должны быть идентичны.
Если версии программ на старом компьютере и на новом разные, после замены файла настроек запустите установку программы заново (поверх) и файл настроек будет обновлен.


Возможен ли перенос Лицензии на другой компьютер?
Приобретенная Лицензия (1 копия) на программу может использоваться только на одной физической машине или в одной виртуальной среде.
Вы имеете право перенести свою Лицензию на программу на другую машину при условии, что на прежней физической машине или виртуальной среде активированная программа полностью удалена. В противном случае мы будем вынуждены отказать вам в активации. Если вам необходимо активировать несколько программ, необходимо приобрести соответствующее количество Лицензий.
После переноса Лицензии на другой компьютер, вероятно, потребуется пройти активацию программы заново.


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


Как восстановить резервную копию MS SQL базы 1С?
Извлеките из архива бэкап базы.
Воспользуйтесь статьей: Восстановление резервной копии базы данных (среда SQL Server Management Studio)


Ошибка отправки e-mail «Syntactically invalid EHLO argument(s).
Имя компьютера указано кириллицей.
Зайдите в меню «Сервис» — «Параметры программы», меню «Дополнительно»
В секции «APP» в параметр
HeloName=
впишите произвольное слово используя латинские буквы (будет использоваться как идентификатор клиента при подключении к SMTP серверу вместо имени локального компьютера), например
HeloName=Effector


Ошибка Error archivator (1): error -3.
Происходит из-за того, что файл в процессе бэкапа был модифицирован. Ошибка в модуле версии программы, устранена в последних версиях Effector Saver.
Решение — обновите Effector Saver до крайнего релиза.


Ошибка отключения пользователей базы 1С, Процесс сервера не может быть запущен, так как указана неправильная идентификация. Проверьте правильность указания имени пользователя и пароля, ProgID: «V83.ComConnector» (HRESULT=8000401A)
Перейдите «Панель управления» — «Администрирование» — «Службы компонентов».
Выберите «Приложения COM+» — «V83COMConnector» — «Свойства» перейдите на вкладку «Удостоверение» и введите данные учетной записи с правами Администратора. В случае если используете домен, укажите доменную учетную запись. Подробней в материале: Решение проблемы «Недопустимая строка с указанием класса».


Ошибка! Временный файл D:TempBase_full.bak заблокирован.
Установите полный доступ пользователю службы Effector Saver на папку временных файлов.

Также ошибка возникает, в случае если задача бэкапа базы SQL еще выполняется с прошлого времени запуска. Проверить это вы можете в «Журнале задач», просмотрев время окончания прошлой задачи.


mem_control: ошибка авторизации

Модераторы: Дмитрий Юхтимовский, Лысиков Денис

mem_control: ошибка авторизации

Коллеги! не оставьте, пожалуйста, без ответа…
Подскажите, в чем «затык»:

Ошибка аутентификации администратора кластера: Произошла исключительная ситуация: Ошибка операции администрирования
Администратор кластера не аутентифицирован

Пароль простой 123, логин тоже проверен — опечаток нет.

Что делать?

Спасибо

mobfox
 
Сообщений: 2
Зарегистрирован: 18 янв 2016, 15:45

Re: mem_control: ошибка авторизации

Сообщение Сергей Савельев » 19 янв 2016, 19:09

Доброго времени суток.

Обычно с аутентификацией кластера проблем не возникает.

Проверьте, пожалуйста, к тому ли кластеру вы подключаетесь.

И если есть возможность, пришлите, пожалуйста, скриншоты.

Сергей Савельев
 
Сообщений: 10
Зарегистрирован: 01 окт 2014, 15:49

Re: mem_control: ошибка авторизации

Сообщение mobfox » 19 янв 2016, 19:12

Добрый день

Вот скриншот

Спасибо

Вложения
Снимок2.PNG
Снимок2.PNG (20.67 KiB) Просмотров: 7902
Снимок.PNG
Снимок.PNG (56.58 KiB) Просмотров: 7902
mobfox
 
Сообщений: 2
Зарегистрирован: 18 янв 2016, 15:45

Re: mem_control: ошибка авторизации

Сообщение nyurkov » 09 фев 2016, 12:02

Добрый день.
У меня наблюдается аналогичная проблема. Версия платформы 8.3.7.1873.
Проверено на 2 серверах и 2-х администраторах, не могу подключиться.
В чем может быть дело?
Спасибо

nyurkov
 
Сообщений: 1
Зарегистрирован: 09 фев 2016, 11:58

Re: mem_control: ошибка авторизации

Сообщение Гилёв Вячеслав » 09 фев 2016, 15:56

под 8.3.7 инструмент пока не адаптировался в виду неготовности платформы к стабильной работе как таковой

Гилёв Вячеслав
 
Сообщений: 2719
Зарегистрирован: 11 фев 2013, 15:40
Откуда: Россия, Москва


Вернуться в Сервисы gilev.ru

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

Ошибка операции администрирования Администратор кластера не аутентифицирован

Автор PATRI0T, 15 мар 2020, 00:28

0 Пользователей и 1 гость просматривают эту тему.

Добрый день.
Есть установленная 1С 8.3.12-1529 на Astra LInux Smolensk 1.6 + Postgres.
Проблема — не могу выгнать пользователей из базы.

Перепробовал все возможные и невозможные пароли. И от постгреса, и от админа 1с, и от агента кластера.
Кластер создавал я сам через утилиту ras, паролей никаких не указывал

root@1CUNIVER:~# rac cluster admin register --name=admin --pwd=qwerty22 --auth=pwd --agent-user=admin --agent-pwd=pass --cluster=bfe82ce6-1629-11ea-f499-0cc47a149810
Ошибка операции администрирования
Администратор кластера не аутентифицирован

root@1CUNIVER:~# rac agent admin list --agent-user=admin --agent-pwd=pass                                 
name    : admin
auth    : pwd
os-user :
descr   :

Что ему не хватает?


Это что за конфигурация, работающая на 1С 8.3.12-1529 ?
На postgresql, да еще на экзотическом линуксе — это проблемы прлатформы 1С
Исправлять там проблемы для 1С неинтересно, у покупных конфигураций проблем выше крыши
Др словами, надо полобовать менять версию 1С
Но мне эта проблема не кажется такой уж серьёзной

Если посмотреть на багтрекере платформы 1С, то на postgresql, да еще на линуксе — там просо завал


Конечно это не тот ответ, который я надеялся услышать))

Конфигурация 1С:Университет ПРОФ, редакция 2.1 (2.1.7.16)
А можно пересоздать кластер и туда перенести базу?


Цитата: PATRI0T от 16 мар 2020, 11:11
Конечно это не тот ответ, который я надеялся услышать))

Конфигурация 1С:Университет ПРОФ, редакция 2.1 (2.1.7.16)
А можно пересоздать кластер и туда перенести базу?

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


Теги:

  • Форум База

  • Форум 1С — ПРЕДПРИЯТИЕ 8.0 8.1 8.2 8.3 8.4

  • Установка и администрирование 1С Предприятие 8

  • Ошибка операции администрирования Администратор кластера не аутентифицирован

Похожие темы (5)

Рейтинг@Mail.ru

Rambler's Top100

Поиск

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

.

Проблема 1

Служба кластеров при запуске обнаруживает сети, в которые входит узел, и для каждой сети определяет сетевые адаптеры. Одна из типичных неполадок связана с тем, что отказоустойчивая кластеризация Windows Server (WSFC) допускает использование для одной сети только одного сетевого адаптера. Все прочие адаптеры этой сети игнорируются.

Предположим, что администратор настроил узел с двумя сетевыми адаптерами для одной сети:

Card1
IP Address: 10.10.10.1
Subnet Mask: 255.0.0.0
Card2
IP Address: 10.10.10.2
Subnet Mask: 255.0.0.0

Сетевой драйвер кластера (Netft.sys) для каждой сети будет использовать только один сетевой адаптер (или группу). Поэтому при данной конфигурации сеть кластера Cluster Network 1 (10.10.10.0/16) будет задействовать только сетевой адаптер Card1, тогда как сетевой адаптер Card2 будет игнорироваться, то есть не будет применяться для связи между узлами. Поскольку работает только одна сеть, при выходе Card1 из строя или утрате сетевого соединения узел не сможет взаимодействовать с другими узлами. Это единственная точка отказа. Чтобы избежать подобной ситуации, кластер следует настраивать так, чтобы между узлами существовало, как минимум, два сетевых пути. В этом случае при отказе одного из сетевых адаптеров связь между узлами будет осуществляться через другой сетевой адаптер.

Проблема 2

Вторую типичную проблему проще всего раскрыть с помощью сценариев. Опишем ее на примере двух различных конфигураций кластера: односайтовой и многосайтовой.

Односайтовый кластер. Предположим, что администратор решил изменить конфигурацию кластера, установив две сети между узлами Node1 и Node2. На узле Node1 он поменял IP-адреса и маски подсети сетевых адаптеров:

Card1
IP Address: 192.168.0.1 (Cluster Network 1)
Subnet Mask: 255.255.255.0
Card2
IP Address: 10.10.10.1 (Cluster Network 2)
Subnet Mask: 255.0.0.0

Кроме того, администратор поменял IP-адреса узла Node2 (192.168.0.2 и 10.10.10.2). При этом на узле Node1 в кластере он добавил группу файлового сервера, назначив ей IP-адрес 192.168.0.15.

Затем администратор протестировал кластер, чтобы убедиться в успешном переходе группы файлового сервера на узел Node2 при отработке отказа. Однако IP-адрес группы файлового сервера не виден в сети, то есть группа находится в автономном состоянии. В журнале событий системы регистрируется событие 1069, описание которого указывает на отказ ресурса с этим IP-адресом.

Причина отказа становится очевидной, если воспользоваться командой PowerShell Get-ClusterLog для вывода журнала кластера. Для этого достаточно ввести следующий набор символов:

Get-ClusterLog

Команда инициирует создание журнала кластера на каждом узле. Для построения журнала кластера только на одном узле можно добавить параметр -Node и указать имя узла. Можно также добавить параметр -TimeSpan для создания журнала только за последние x минут. Например, приведенная ниже команда предписывает построить журнал кластера на узле Node2 за последние 15 минут:

Get-ClusterLog –Node Node2 –TimeSpan 15

В результатах, представленных на экране 1, указано состояние «status 5035.».

Информация о состоянии 5035 в файле журнала кластера
Экран 1. Информация о состоянии 5035 в файле журнала кластера

Это сообщение об ошибке указывает на неработоспособное состояние сети кластера. Если администратор перейдет в диспетчер отказоустойчивости кластеров, то в разделе «Сети» он увидит, что сеть 192.168.0.0/24 содержит только один сетевой адаптер для узла Node1. Однако имеется новая сеть 192.0.0.0/8, обслуживаемая сетевым адаптером узла Node2. Администратор, поменяв IP-адрес сетевого адаптера на узле Node2, не поменял маску подсети. Таким образом, ошибка 5035 возникла из-за неверной настройки сетевого адаптера.

Создавая ресурс с IP-адресом, можно указать сеть, которая будет использоваться для него. Если эта сеть не будет существовать на узле, куда данный ресурс перейдет при отработке отказа, то WSFC не поменяет сеть, используемую ресурсом. В данном примере, при том IP-адресе, который указал администратор, и маске подсети, применяемой этим IP-адресом, группа файлового сервера сможет работать только по сети Cluster Network 1 (192.168.0.0/24).

Многосайтовый кластер. В случае многосайтового кластера каждый узел обычно имеет собственную сеть со своим IP-адресом. При первоначальном создании кластера и его ролей с помощью мастера создания ресурсов вам предлагается указать IP-адрес для сетей каждого из узлов, настроенных для клиентского доступа (см. экран 2).

Создание многосайтового кластера
Экран 2. Создание многосайтового кластера

Мастер создания ресурсов, создавая IP-адреса и назначая имя сети, автоматически присваивает параметру зависимости этого имени сети значение «или». Это означает, что если один из IP-адресов в сети, имя также видно в сети. Создавая группы или ресурсы перед добавлением узлов из других сетей, необходимо вручную создавать эти вторичные IP-адреса и добавлять зависимость «или».

Проблема 3

Для формирования кластера необязательно быть администратором домена, но создание объектов в Active Directory (AD) требует наличия соответствующих прав. Как минимум, необходимо обладать правами на просмотр и создание объектов (Read and Create) в том подразделении (OU), где создается данный объект имени кластера (CNO). CNO – это объект-компьютер, связанный с ресурсом-кластером «Имя кластера». При создании кластера служба WSFC использует учетную запись, с которой вы регистрировались в системе, чтобы создать объект CNO в том же OU, которому принадлежат узлы. Если вы не обладаете достаточными правами в отношении данного OU, кластер не будет создан, и система выдаст ошибку, как показано на экране 3.

Ошибка процесса создания кластера
Экран 3. Ошибка процесса создания кластера

В статье «Диагностика проблем отказоустойчивых кластеров Windows Server 2012» (№ 10 за 2013 г.) я рассказывал об использовании мастера проверки конфигурации в диспетчере отказоустойчивости кластеров для выявления причин возникающих проблем. Мастер позволяет выполнять различные тесты, включая проверку настроек Active Directory. В ответ на попытку запуска этого теста без достаточных прав в отношении данного OU будет выдана ошибка, как показано на экране 4. Соответствующая настройка прав позволит вам создать кластер.

Ошибка проверки настроек Active Directory
Экран 4. Ошибка проверки настроек Active Directory

Все другие ресурсы с сетевыми именами в кластере ассоциированы с объектами виртуальных компьютеров (VCO), создаваемыми в том же OU, что и CNO. Следовательно, при назначении ролей в кластере необходимо указать CNO с соответствующими правами (просмотр и создание) в отношении OU, поскольку CNO формирует все VCO в кластере. В противном случае новая роль будет находиться в состоянии сбоя. Тогда в журнале появится событие 1194 (см. экран 5).

Событие 1194 в журнале событий системы
Экран 5. Событие 1194 в журнале событий системы

Есть и другие установки локального компьютера, способные вызвать ошибки (включая ошибки отказа в доступе) при создании VCO в AD.

1. В составе локальной группы «Пользователи» больше нет группы «Прошедшие проверку пользователи». Обычно она удаляется объектами групповой политики (GPO) или шаблонами безопасности.

2. В локальной политике безопасности разрешение Access this computer from the network («Доступ к этому компьютеру по сети») или Add workstations to the domain («Добавление рабочих станций к домену») больше не включает группу «Прошедшие проверку пользователи». Обычно она удаляется объектами групповой политики (GPO) или шаблонами безопасности.

3. Включены следующие права доступа:

  • сетевой доступ (не разрешать перечисление учетных записей SAM анонимными пользователями);
  • сетевой доступ (не разрешать перечисление учетных записей SAM и общих ресурсов анонимными пользователями).

4. Ресурс имени кластера в состоянии сбоя.

Проблема 4

CNO и VCO – учетные записи компьютера и, подобно учетным записям пользователей, они имеют пароли, генерируемые AD случайным образом. По умолчанию политика домена предусматривает сброс пароля учетной записи компьютера каждые 60 дней.

СNO используется для таких операций, как добавление новых узлов к кластеру, создание новых объектов в домене и выполнение динамической миграции виртуальных машин с узла на узел. Для выполнения этих операций пароль CNO в домене должен быть актуальным. Для верности служба кластера делает попытку сброса паролей этих объектов по истечении половины срока (через 30 дней). Если пароль не сброшен на 60-дневной отметке, имя кластера не видно в сети.

Для сброса пароля необходимо выполнить восстановление в диспетчере отказоустойчивости кластеров. Как показано на экране 6, щелкните правой кнопкой имя проблемного ресурса и выберите «Дополнительные действия» и «Восстановить».

Сброс пароля вручную в диспетчере отказоустойчивости кластеров
Экран 6. Сброс пароля вручную в диспетчере отказоустойчивости кластеров

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

Проблема 5

Чтобы узел был осведомлен о том, какие узлы являются активными участниками кластера (то есть о текущем членстве), применяется ряд периодических контрольных сигналов, передаваемых между узлами по сети. Эти пакеты сигналов представляют собой UDP-датаграммы, следующие через порт 3343.

Каждый пакет включает регистрационный номер, по которому отслеживается факт приема пакета. Это работает следующим образом: узел Node1, отправляющий регистрационный номер 1111, ожидает ответного пакета, включающего 1111. Эти действия совершаются между всеми узлами каждую секунду. Если узел Node1 не получает ответного пакета, он отправляет следующий по порядку регистрационный номер (1112), и т.д.

По умолчанию, если узел не получает пять контрольных сигналов в течение пяти секунд, WSFC устанавливает факт отказа узла. Активный узел в кластере отправляет пакет на узел, где установлен отказ, чтобы завершить работу службы кластера, и регистрирует событие 1135 в журнале событий системы (см. экран 7).

Событие 1135 в журнале событий системы
Экран 7. Событие 1135 в журнале событий системы

Такое событие может быть вызвано несколькими причинами, многие из которых связаны с блокировкой связи через порт 3343:

1. Отказ сетевого оборудования.

2. Устаревший драйвер или устаревшая прошивка сетевого адаптера.

3. Сетевая задержка.

4. Протокол IPv6 разрешен на серверах, но параметры брандмауэра Windows выключают следующие разрешения для входящего и исходящего трафика:

  • основы сетей – объявление поиска соседей;
  • основы сетей – запрос поиска соседей.

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

6. Проблемы производительности (зависания, задержки и прочее).

7. Неправильно настроенные параметры буфера приема у драйвера сетевого адаптера.

Первым делом я всегда проверяю счетчик отброшенных принятых пакетов в составе объекта производительности сетевого интерфейса в окне системного монитора. Этот счетчик отслеживает число входящих пакетов, которые были отброшены, хотя и не было зафиксировано каких-либо ошибок, препятствующих их передаче протоколу верхнего уровня. Одна из возможных причин – необходимость освободить место в буфере.

Для добавления счетчика отброшенных принятых пакетов в окне системного монитора щелкните правой кнопкой на дисплее и выберите «Добавить счетчики». В открывшемся окне добавления счетчиков укажите нужный компьютер, выполните прокрутку и выберите счетчик «Отброшено принятых пакетов». В выпадающем списке «Экземпляры выбранного объекта» выберите нужный сетевой адаптер и нажмите «Добавить» (см. экран 8).

Добавление счетчика отброшенных принятых пакетов в системный монитор
Экран 8. Добавление счетчика отброшенных принятых пакетов в системный монитор

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

В отказоустойчивом кластере Windows Server 2012 R2 можно воспользоваться мастером проверки конфигурации для выполнения проверки сетевого взаимодействия. Этот тест позволяет проверить возможность информационного обмена между узлами через порт 3343. Если есть проблемы связи, то будет выдана соответствующая ошибка с указанием возможной причины.

Проблема 6

Иногда диспетчер отказоустойчивости кластеров не открывается, выдавая сообщение об ошибке (см. экран 9). В процессе открытия диспетчер отказоустойчивости кластеров устанавливает WMI-соединение с каждым узлом кластера. Сообщение об ошибке, приведенное на экране 9, указывает на то, что один из узлов имеет недопустимое пространство имен, то есть с узла был удален экземпляр Cluster WMI (Cluswmi.mof). Остается выяснить, на котором из узлов он удален, поскольку в сообщении об ошибке эта информация отсутствует.

Сообщение о недопустимом пространстве имен
Экран 9. Сообщение о недопустимом пространстве имен

В листинге приведен сценарий Windows PowerShell, позволяющий выявить узел, утративший экземпляр Cluster WMI.

Установив проблемный узел, можно ввести команду

Set-Location C:WindowsSystem32Wbem
Mofcomp.exe Cluswmi.mof

Наиболее распространенной причиной утраты Cluswmi.mof узлом является устаревший способ решения проблем WMI. Для устранения неполадок WMI администраторы обычно используют команду Mofcomp.exe *.mof, позволяющую скомпилировать все файлы Managed Object Format (MOF) в репозиторий WMI. Однако дело в том, что существует довольно много файлов удаления для различных ролей и компонентов Windows, включая Cluster WMI. Поэтому файл Cluswmi.mof, устанавливаемый с помощью этой команды, впоследствии удаляется. Правильный способ восстановления репозитория WMI – с использованием команды Winmgmt.exe.

Ошибку легче предупредить

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

  • «Рекомендуемые исправления и обновления для отказоустойчивых кластеров на базе Windows Server 2012 R2» (support.microsoft.com/kb/2920151/EN-US);
  • «Рекомендуемые исправления и обновления для отказоустойчивых кластеров на базе Windows Server 2012» (support.microsoft.com/kb/2784261/EN-US);
  • «Рекомендуемые исправления и обновления для отказоустойчивых кластеров на базе Windows Server 2008 R2» (support.microsoft.com/kb/980054/EN-US).

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

Листинг. Сценарий PowerShell для определения узлов с отсутствующим экземпляром Cluster WMI

$NodeNames = Get-ClusterNode
ForEach ($ClusterName in $NodeNames)
{
Write-Host -NoNewline «Testing $ClusterName»
Try
{
$result = (Get-WmiObject -Class «MSCluster_CLUSTER» `
-namespace «rootMSCluster» `
-authentication PacketPrivacy `
-computername $ClusterName -erroraction stop).__SERVER
Write-host «: Successfully queried cluster node»
}
Catch
{
Write-host -NoNewline «: Failed to query cluster node»
Write-host -ForegroundColor Red -BackgroundColor Black `
$_.Exception.Message
}
}
   Mikhail Volkov

02.02.21 — 15:28

Смотрю тему Отключение зависших сеансов  на сервере., у меня выдает: Метод объекта не обнаружен (ОтключитьСеанс)!? Как исправить?

   Kigo_Kigo

1 — 02.02.21 — 15:35

а режим совместимости какой?

   fisher

2 — 02.02.21 — 15:37

(1) Это ты так издалека к версии БСП подбираешься? :)

   Kigo_Kigo

3 — 02.02.21 — 15:38

(2) ога, сам сталкивался с подобным

   Mikhail Volkov

4 — 02.02.21 — 15:58

(1) Версия 8.2.16, платформа 8.3.10.2466, обычное приложение (не УФ) Альфа-Авто.

   ДенисЧ

5 — 02.02.21 — 16:39

(4) У тебя там БСП (если она вообще есть) древней египетских пирамид…

   Deal with it

6 — 02.02.21 — 16:54

Пользуюсь таким примером:

Если Найти(СтрокаСоединенияИнформационнойБазы(), «Srvr») > 0 Тогда

        // серверный вариант

        Поиск1 = Найти(СтрокаСоединенияИнформационнойБазы(), «Srvr=»);

        ПодстрокаПоиска = Сред(СтрокаСоединенияИнформационнойБазы(), Поиск1 + 6);

        ИмяСервера = Лев(ПодстрокаПоиска, Найти(ПодстрокаПоиска, «»»») — 1);

        // теперь ищем имя базы

        Поиск1 = Найти(СтрокаСоединенияИнформационнойБазы(), «Ref=»);

        ПодстрокаПоиска = Сред(СтрокаСоединенияИнформационнойБазы(), Поиск1 + 5);

        ИмяБазы = Лев(ПодстрокаПоиска, Найти(ПодстрокаПоиска, «»»») — 1);

    Иначе

        // для других способов подключения алгоритм не актуален

        Возврат;

    КонецЕсли;

    
    МассивИсключений = Новый Массив;

    МассивИнденксов = Новый Массив;

    
    Для Каждого Стр Из Исключения Цикл

        МассивИсключений.Добавить(Стр.Значение.Наименование);

    КонецЦикла;

    
    Коннектор = Новый COMОбъект(«v83.COMConnector.1»);

    //Сообщить(«СОМ объект успешно получен»);//////////////////

    Агент = Коннектор.ConnectAgent(ИмяСервера);

    //Сообщить(«Агент сервера успешно получен»); ////////////////////

    Кластеры = Агент.GetClusters();

    Для каждого Кластер из Кластеры Цикл

        АдминистраторКластера = «admins»;

        ПарольКластера = «E8vbteud»;

        Агент.Authenticate(Кластер, АдминистраторКластера, ПарольКластера);

        //Сообщить(«Утентификация сервера успешно получена»); ////////////////////

        Процессы = Агент.GetWorkingProcesses(Кластер);

        Для каждого Процесс из Процессы Цикл

            Порт = Процесс.MainPort;

            // теперь есть адрес и порт для подключения к рабочему процессу

            РабПроц = Коннектор.ConnectWorkingProcess(ИмяСервера + «:» + СтрЗаменить(Порт, Символы.НПП, «»));

            РабПроц.AddAuthentication(«Admin», «4615426»);

            
            //Сообщить(«Утентификация рабочего процесса успешно выполнена»); ////////////////////

            
            ИнформационнаяБаза = «»;

            
            Базы = Агент.GetInfoBases(Кластер);

            Для каждого База из Базы Цикл

                Если База.Name = ИмяБазы Тогда

                    ИнформационнаяБаза = База;  

                    //Сообщить(ИнформационнаяБаза);/////////////

                    Прервать;

                КонецЕсли;

            КонецЦикла;

            Если ИнформационнаяБаза = «» Тогда

                // база не найдена

            КонецЕсли;

            
            Сеансы = Агент.GetInfoBaseSessions(Кластер, ИнформационнаяБаза);

            Для каждого Сеанс из Сеансы Цикл

                
                Если нРег(Сеанс.AppID) = «backgroundjob» ИЛИ нРег(Сеанс.AppID) = «designer» Или  нРег(Сеанс.AppID) = «SrvrConsole»Тогда

                    // если это сеансы конфигуратора или фонового задания, то не отключаем

                    Продолжить;

                КонецЕсли;

                Если Сеанс.UserName = ИмяПользователя() Тогда

                    // это текущий пользователь

                    Продолжить;

                КонецЕсли;

                Если МассивИсключений.Найти(Сеанс.UserName) = Неопределено Тогда  

                    а=0;        

                    //Сообщить(Сеанс.UserName);/////////////

                    Агент.TerminateSession(Кластер, Сеанс);

                КонецЕсли;

                
            КонецЦикла;

            
            ИнформационнаяБаза2 = РабПроц.CreateInfoBaseInfo();

            ИнформационнаяБаза2.Name = ИмяБазы;

            СоединенияБазы = РабПроц.GetInfoBaseConnections(ИнформационнаяБаза2);

            
            //СоединенияБазы = Агент.GetInfoBaseConnections(Кластер, ИнформационнаяБаза);

            // Разорвать соединения клиентских приложений.

            Для Каждого Соединение Из СоединенияБазы Цикл

                
                Если нРег(Соединение.AppID) = «backgroundjob»

                    Или  нРег(Соединение.AppID) = «designer»

                    Или нРег(Соединение.AppID) = «SrvrConsole»

                    Или нРег(Соединение.AppID) = «COMConsole»

                    Или  нРег(Соединение.AppID) = «SystemBackgroundJob» Тогда

                    
                    // если это соединение конфигуратора или фонового задания, то не отключаем

                    Продолжить;

                КонецЕсли;

                
                Если Соединение.UserName = ИмяПользователя() Тогда

                    // это текущий пользователь

                    Продолжить;

                КонецЕсли;

                
                Если МассивИсключений.Найти(Соединение.UserName) = Неопределено Тогда

                    // это текущий пользователь

                    а=0;

                    //Сообщить(Соединение.UserName);/////////////

                    РабПроц.Disconnect(Соединение);

                КонецЕсли;                

            КонецЦикла;

        КонецЦикла;

    КонецЦикла;

   Deal with it

7 — 02.02.21 — 16:55

+(6) плюс на форме обработки у меня список значений, куда добавляю пользователей, которых не завершать, т.е. исключения.

   Mikhail Volkov

8 — 02.02.21 — 17:18

(6) Вообще-то мне надо закрыть конфигуратор (и желательно фоновые задания) по завершению работы последнего пользователя в базе…

   Deal with it

9 — 02.02.21 — 17:21

(8) ну так уберите из кода эти условия, и завершать будет вообще все сеансы и подключения к базе.

Типа такие условия: нРег(Сеанс.AppID) = «backgroundjob».

   Deal with it

10 — 02.02.21 — 17:23

+(9) код рабочий, если ком обьект v83.COMConnector.1 (или как он у вас назван в службе компонентов) зарегистрирован в системе, это важно.

   Deal with it

11 — 02.02.21 — 17:24

Разумеется в исключение надо поставить текущий сеанс, под которым вы запускаете обработку))) ну, на всякий случай уточняю

   Mikhail Volkov

12 — 02.02.21 — 17:55

(10) Мне бы попроще, без «ком обьект v83.COMConnector.1 (или как он у вас назван в службе компонентов)»

Есть у меня функция для предупреждения пользователя, если кассовая смена не закрыта:

Функция ПоследнийПользовательБазы(КопияИБ = Истина) Экспорт

    Если КопияИБ И КопияИнформационнойБазы() Тогда

        Возврат Ложь;

    КонецЕсли;

    СоединенияИнформационнойБазы = ПолучитьСоединенияИнформационнойБазы();

    Если СоединенияИнформационнойБазы.Количество() = 1 Тогда

        Возврат Истина;

    КонецЕсли;

    Количество = 0;

    Для Каждого Соединение Из СоединенияИнформационнойБазы Цикл

        Если ПредставлениеПриложения(Соединение.ИмяПриложения) = «Конфигуратор» Тогда

            Продолжить;

        КонецЕсли;

        Количество = Количество + 1;

    КонецЦикла;

    Возврат Количество = 1;

КонецФункции // ПоследнийПользовательБазы()

Как отключить сеанс, если ПредставлениеПриложения(Соединение.ИмяПриложения) = «Конфигуратор»?

   Deal with it

13 — 02.02.21 — 18:32

(12) не вижу как она предупреждает, и зачем строка «Количество = Количество + 1;» если вы все равно возвращаете «Количество = 1;»?

   Kesim

14 — 02.02.21 — 18:46

(13) Возврат Количество = 1; — возвращает булево (типа: это последний пользователь вне конфигуратора? истина/ложь)

   Mikhail Volkov

15 — 02.02.21 — 18:51

(13) Функцию (12) лишь привел для того, что могу получить все СоединенияИнформационнойБазы, найти нужное, его НомерСеанса. А как правильно его ОтключитьСеанс — не знаю?

   Mikhail Volkov

16 — 03.02.21 — 07:26

(14) > типа: это последний пользователь вне конфигуратора?

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

(13) А для чего этот пример, по отключению зависших сеансов? Непосредственное отключение: РабПроц.Disconnect(Соединение);? Долгий путь к РабПроц, через Коннектор = Новый COMОбъект(«v83.COMConnector.1»);

Смотрю обработку Поиск и отключение зависших сеансов на сервере 1С (http://catalog.mista.ru/public/548893/), в ней тоже подобное, через СоединениеСАгентом.TerminateSession(РабочийКластер,ТекСеанс); Попроще нельзя?

   Mikhail Volkov

17 — 03.02.21 — 08:15

(13) Нашел откуда пример (6), из Программное отключение сеансов 1С 8.2 (http://catalog.mista.ru/1c/articles/77671/). Только не понял: РабПроц.Disconnect(Соединение); делать обязательно, не достаточно Агент.TerminateSession(Кластер, Сеанс);? (в обработке http://catalog.mista.ru/public/548893/ нет Disconnect(Соединение))

   John83

18 — 03.02.21 — 08:45

(0) это из УПП 1.3

   Mikhail Volkov

19 — 03.02.21 — 10:38

(18) Ага, обработка АктивныеПользователи процедура ЗавершитьСеанс(Команда), но там откуда?

   Deal with it

20 — 03.02.21 — 10:53

(17) завершить сеанс не равно отключить соединение. Есть ситуации, когда сеанс завершен некорректно и подключение зависает или дублируется. Агент сервера вроде как должен сам завершать зависшие подключения, но лишь по истечению какого-то времени, мы же говорим о сиюминутном завершении всех сеансов и подключений.

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

   Mikhail Volkov

21 — 03.02.21 — 12:01

(18)+ Запустил УПП в режиме отладки, посмотреть как выполняется процедура ЗавершитьСеанс(Команда), открыл обработку АктивныеПользователи. В ней даже кнопки нет Завершить сеанс!?

(20) В твоем примере (6):

        АдминистраторКластера = «admins»;

        ПарольКластера = «E8vbteud»;

У меня: Ошибка при вызове метода контекста (Authenticate): Произошла исключительная ситуация: Ошибка операции администрирования. Администратор кластера не аутентифицирован. Где их брать, в консоле администрирования? АдминистраторКластера взял, а пароль не помню, пустой не подходит. Как посмотреть пароль?

   Deal with it

22 — 03.02.21 — 12:55

(21) ну так пропишите своего админа кластера и пароль.

Я вам дал инструмент, ваше дело как им распоряжаться. Гугл вам в помошь

   Mikhail Volkov

23 — 03.02.21 — 13:50

(22) Галочка стояла Аутентификация ОС — поэтому не помню, поставил новый пароль 1С — заработало. За основу взял , тоже громоздко, но не так (6):

Процедура ОтключениеКонфигуратора(Отказ) Экспорт

    Соединитель = Новый COMОбъект(«V83.COMConnector»);

    Кластер = Сред(СтрокаСоединенияИнформационнойБазы(), 7, Найти(СтрокаСоединенияИнформационнойБазы(), «;Ref=») — 8);    // «andromeda:1641»;

    ИмяБазы = Сред(СтрокаСоединенияИнформационнойБазы(), Найти(СтрокаСоединенияИнформационнойБазы(), «;Ref=») + 6, СтрДлина(СтрокаСоединенияИнформационнойБазы()) — Найти(СтрокаСоединенияИнформационнойБазы(), «;Ref=») — 7);    // «PatrERP»;

    ПериодичностьПроверки = 8;

    СтрокаСоединения = «TCP://» + Кластер;

    АдминистраторКластера = «»;

    ПарольАдминистратора  = СвязьКА.ПарольКонсольАдминистратор(АдминистраторКластера);

    Попытка

        // попытка соединения с центральным сервером

        СоединениеСАгентом = Соединитель.ConnectAgent(СтрокаСоединения);

        РабочийКластер = СоединениеСАгентом.GetClusters().GetValue(0);

        СоединениеСАгентом.Authenticate(РабочийКластер, АдминистраторКластера, ПарольАдминистратора);

        ИБ = СоединениеСАгентом.GetInfoBases(РабочийКластер);

        Для Каждого СтрИБ Из ИБ Цикл

            Если СтрИБ.Name = ИмяБазы Тогда

                ТекущаяИБ = СтрИБ;

                СеансыИБ  = СоединениеСАгентом.GetInfoBaseSessions(РабочийКластер,ТекущаяИБ);

                
                //Проверяем наличие сеанса пользователя, кроме 1CV8 — толстого клиента

                Для Каждого ТекСеанс Из СеансыИБ Цикл

                    Если ТекСеанс.AppID = «1CV8» Тогда

                        Продолжить;

                    КонецЕсли;

                    ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени(ТекСеанс.userName);

                    СоединениеСАгентом.TerminateSession(РабочийКластер, ТекСеанс);

                //    Если ТекСеанс.dbProcTook > Цел(ПериодичностьПроверки*60*1000) Тогда //в мс.

                //        Сообщить(«Зависший сеанс у пользователя: » + ТекСеанс.userName + «, компьютер: » + ТекСеанс.Host);

                //    КонецЕсли;    

                //    Если ТекСеанс.connection = Неопределено Тогда

                //        Сообщить(«Пользователь: » + ТекСеанс.userName + «, компьютер: » + ТекСеанс.Host + «, аварийно завершил сеанс»);

                //    КонецЕсли;

                //    Сообщить(» ->>> Сеанс пользователя: » + ТекСеанс.userName + «, приложение: » + ТекСеанс.AppID + «, компьютер: » + ТекСеанс.Host + «, отключен » + ТекущаяДата());    

                КонецЦикла;    

                Прервать;    // Только для указанной информационной базы

            КонецЕсли;

        КонецЦикла;

    Исключение

        Отказ = Истина;

        Сообщить(«Не удалось завершить сеанс конфигуратора » + ТекущаяДата() + «; » + ОписаниеОшибки(), СтатусСообщения.Внимание);    

    КонецПопытки;

КонецПроцедуры // ОтключениеКонфигуратора()

Правда по завершению выскакивает предупреждение, что сеанс завершен администратором с вопросом: Перезапустить или Завершить работу. Как бы его убрать? Интересно, это мешает?

   Mikhail Volkov

24 — 03.02.21 — 14:37

+ Вроде не мешает, dt-выгрузка делается запущенным из 1С bat-файлом.

   Mikhail Volkov

25 — 03.02.21 — 14:57

(19)+ СоединенияИБКлиентСервер — это общий модуль, еще используется общий модуль СоединенияИБ и другие для ОтключитьСеанс(). В Альфа-Авто их нет, не стал разбираться…

   Mikhail Volkov

26 — 03.02.21 — 15:26

Вопрос не по теме, в bat-файле имя файла dt-выгрузки формируется: set «BakName=f:workspace1C1с_АрхивыAAAAkitAAAAkit_%date:~0,2%%date:~3,2%%date:~6,4%.dt». Но работа 1С может задержаться, завершиться после полуночи. Как бы мне BakName сформировать по вчерашней дате? Ведь в месяцах разное число дней.

   Mikhail Volkov

27 — 09.02.21 — 06:21

(6) Этот алгоритм может определить какой сеанс из 1CV8 (толстого клиента) является зависшим? Или другой метод по СоединенияИнформационнойБазы = ПолучитьСоединенияИнформационнойБазы();?

Свойства:

ИмяКомпьютера (ComputerName)

ИмяПриложения (ApplicationName)

НачалоСоединения (ConnectionStarted)

НомерСеанса (SessionNumber)

НомерСоединения (ConnectionNumber)

Пользователь (User)

   SiAl-chel

28 — 09.02.21 — 06:27

(26)

1. Выгружать базу в файл с произвольным именем.

2. После пакетного запуска в скрипте ожидать появления этого ненулевого файла.

3. После выгрузки формировать имя файла по дате и времени.

4. Переименовать файл с произвольным именем в файл с нужным именем из шага 3.

   Mikhail Volkov

29 — 09.02.21 — 07:11

(28) Наверное не точно задал вопрос (26), поясняю: обычно ночная выгрузки делается после 21 часа, когда все пользователи вышли из базы. Но бывает срочная работа, или пользователь неправильно вышел (только из терминала, но не из базы), или просто забыл выйти. С 21 часа включается принудительный мягкий выход, задается вопрос пользователю, но пользователь может отказаться выйти. Тогда принудительный мягкий выход откладывается на час. Через час ситуация может повториться… и через 2, 3, сейчас этот алгоритм работает до полуночи (пока более длительных задержек не было). Хотелось бы, чтобы этот алгоритм мог работать до утра (начала следующего рабочего дня). Но имя файла dt-выгрузки после полуночи сформировалось по вчерашней дате!?

   Mikhail Volkov

30 — 09.02.21 — 12:48

(27)+ Наверное нет. Тогда тот же алгоритм (23) по условию: Если ТекСеанс.dbProcTook > Цел(ПериодичностьПроверки*60*1000) Тогда //в мс.

   SiAl-chel

31 — 09.02.21 — 12:54

(29) Ваще плевать с каким именем он сформировался. Делай выгрузки с рандомным именем, а потом другим заданием с нужной тебе регулярностью проверяй, чтобы имя файла соответствовало дате и времени изменения (или создания) файла, если нет, то тогда переименовывай файл.

   Mikhail Volkov

32 — 09.02.21 — 13:05

(31) По существованию файла с именем по дате как раз принимается решение: делать ли завершение сеансов и dt-выгрузку, или нет.

   Mikhail Volkov

33 — 09.02.21 — 15:05

Вроде нашел https://www.sql.ru/forum/445183/kak-poluchit-vcherashnee-chislo-v-bat-fayle ужас какой!? Неужели у bat-файлов нет функции вчерашний даты? Если текущий час больше 6 часов, то имя файла BakName формируется по сегодняшней дате (26). Если нет (после полуночи), то по вчерашней.

   SiAl-chel

34 — 09.02.21 — 21:10

(33) Бат-файлы это — не язык программирования, это скриптовый язык. В нем есть ровно то, что могут консольные команды ОС и стороннего софта.

Определение вчерашних дат взято вот отсюда https://www.sql.ru/forum/445183/kak-poluchit-vcherashnee-chislo-v-bat-fayle

set /A CalculatePreviousDay=1%Day%-1

set Yesterday=%CalculatePreviousDay:~1,2%

set PreviousDate=%Year%%Month%%Yesterday%

   Mikhail Volkov

35 — 10.02.21 — 06:48

(34) Это лишь фрагмент замены: «иначе будут проблемы на числах 08 и 09…», а сам код еще строк 60… советуют получать вчерашнюю дату через PowerShell (здесь вряд ли помогут). Спс всем.

   Mikhail Volkov

36 — 10.02.21 — 15:21

   Mikhail Volkov

37 — 13.03.21 — 08:12

А как создать некое событие для Windows, в 1С это возможно?

Бат-файл запущенный из 1С не всегда выполняется до конца, иногда его выполнение прерывается (ход выполнения пишется в лог-файл). Потому, что он запущен под конкретным пользователем 1С. А этот пользователь (подозреваю) завершил работу, и вышел из терминала. Решил выполнять bat-файл под системной учетной записью: СИСТЕМА или USR1CV8. Для этого в планировщике заданий создал свое с моим bat-файлом. Из 1С это задание запускаю ЗапуститьПриложение(«schtasks /run /tn имя_задачи_в_планировщике»); Справка SchTasks /? дает описание:

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

Примеры:

    SCHTASKS /Run /?

    SCHTASKS /Run /TN «АрхивацияНачать архивацию»

    SCHTASKS /Run /S <система> /U <пользователь> /P <пароль> /I

         /TN «АрхивацияАрхивация и восстановление»

Подомною все прекрасно сработало, а под рядовым пользователем — ничего!? Выходит выполнять задачу (в справке прямо ни сказано) можно только администратору? Поэтому решил в 1С создать некое событие для Windows, а которое реагировало бы мое задание в планировщике. Возможно? (никогда не делал)

   Mikhail Volkov

38 — 13.03.21 — 13:47

Вроде нашел, но: Команда eventcreate позволяет администратору создать запись об особом событии в указанном журнале событий

т.е. не рядовому пользователю, а только администратору.

Смотрю журнал событий Windows Безопасность, в нем такие события: Вход с учетной записью выполнен успешно, Выполнен выход учетной записи из системы… А вход/выход пользователей из базы 1С, или что другое связанное 1С пишется в журнал событий Windows? Или можно настроить чтоб писалось?

   Mikhail Volkov

39 — 16.03.21 — 13:14

1С что-то пишет в журнал событий Windows? Или можно настроить чтоб писалось?

   Mikhail Volkov

40 — 16.03.21 — 16:14

А можно ли заставить 1С сделать что-то «нехорошее» (обычно не делается, но без последствий), что обязательно запишется в журнал событий Windows?

   Kassern

41 — 16.03.21 — 16:21

(40) а накой лезти в журнал событий винды? Чем тебя не устравивает писать какой нить файл — флаг для этих нужд?

   Mikhail Volkov

42 — 16.03.21 — 17:10

(41) Есть такой флаг: при завершении сеанса последнего пользователя очищается лог-файл Как создать пустой текстовый файл из 1С Потом еще: при завершении сеанса последнего пользователя запускается нужный bat-файл, который выполняет все что нужно. Но не всегда: bat-файл запускается под учетной записью последнего пользователя. Если он завершает свой терминальный сеанс, то выполнение bat-файла прерывается. А запустить bat-файл планировщиком заданий командой: ЗапуститьПриложение(«schtasks /run /tn имя_задачи_в_планировщике»); не доступно рядовому пользователю, только администраторам. Запуск задания по расписанию сейчас делается в конце ночи (в 6 утра) в случае его не выполнения, но хотелось бы чтобы сразу выполнялось.

   Kassern

43 — 16.03.21 — 17:26

(42) каша какая то получается…Зачем запускать бат файл под учеткой последнего пользователя? Все пользователи вышли, создаешь флаг, что можно делать выгрузку. в шедулере можешь хоть каждые 5 минут проверять наличие файла флага, если он существует то запускать выгрузку чего тебе там надо, после выгрузки этот файл флаг удаляется.

   Mikhail Volkov

44 — 16.03.21 — 17:34

(43) Это 1-й вариант, а 2-й (39)?

   Mikhail Volkov

45 — 17.03.21 — 06:47

Нашел ответ на 1-й вопрос (39), настроил фильтр журнала событий Windows, отбирающего строки с ошибками и зависаниями, вызванными программой 1С по статье: https://infostart.ru/1c/articles/190790/. В отборе есть события, например, Программа 1cv8.exe версии 8.3.10.2466 прекратила взаимодействие с Windows и была закрыта — это событие Ошибка. Интересно, есть ли в журнале события о нормальном завершении 1С. Наверное нет… а как сделать чтобы были?

   Mikhail Volkov

46 — 17.03.21 — 12:00

Вроде убрал все лишнее из фильтра, оставил:

<QueryList>

  <Query Id=»0″ Path=»Application»>

    <Select Path=»Application»>

    *[EventData[(Data=’1cv8.exe’)]]

    </Select>

  </Query>

</QueryList>

Теперь в журнале событий вижу не только Ошибки от источников Application Error и Application Hang, но и Сведения от Windows Error Reporting. А события запуска/остановки 1С не вижу!? Фильтр неправильно настроен, или события запуска/остановки 1С в журнале не фиксируются?

   Kassern

47 — 17.03.21 — 12:07

(46) У тебя все пользователи терминально работают?

   Mikhail Volkov

48 — 17.03.21 — 13:32

(47) Да, завершение терминального сеанса фиксируется в журнале событий. Но не всегда пользователи сами его завершают. Иногда просто «выпадают» из терминала.

   Mikhail Volkov

49 — 18.03.21 — 10:11

> А можно ли заставить 1С сделать что-то «нехорошее» (обычно не делается, но без последствий), что обязательно запишется в журнал событий Windows? (40)

Послал сообщение командой MSG, и оно зафиксировалось в журнале событий Windows! Имя журнала: Система, Источник: Application Popup, Уровень: Сведения, Код события: 26, Ключевые слова: Классический. По нему можно запускать свое задание под системой учетной записью. Вот только бы не перепутать его с другими событиями… На вкладке Триггеры по кнопке Изменить фильтр событий… создал фильтр XML:

<QueryList>

  <Query Id=»0″ Path=»System»>

    <Select Path=»System»>*[System[Provider[@Name=’Application Popup’] and (Computer=’PERSEUS.corp.akit’) and (Level=4 or Level=0) and (band(Keywords,36028797018963968)) and (EventID=26)]]</Select>

  </Query>

</QueryList>

Как в него вставить текст сообщения? https://ibb.co/N1D7tzN (Если получится, текст сообщения будет другой).

   Mikhail Volkov

50 — 19.03.21 — 07:13

Может Использовать другую крайне редко используемую команду (какую?), чтобы она зафиксировалось в журнале событий Windows? (желательно без имени пользователя)

   Mikhail Volkov

51 — 23.03.21 — 11:25

Если сообщение командой MSG (всем или конкретному пользователю) послано, когда нет активных сеансов (или конкретного пользователя) на сервере-терминале, оно не фиксируется в журнале событий Windows?

   mistеr

52 — 23.03.21 — 12:07

Жесть, сколько садо-мазо стоя в гамаке, вместо того, чтобы настроить нормальные бэкапы.

   Kassern

53 — 23.03.21 — 12:12

(52) мне кажется, что это еще не предел)

   Mikhail Volkov

54 — 23.03.21 — 12:43

(52) Бэкапы настроены, делаются на SQL-сервере. Но были случаи его выхода из строя. Это дополнительно…

Секцию темы на IT/Админ сменить можно? А то ее только 1С-ники видят…

   mistеr

55 — 23.03.21 — 13:38

(54) >Но были случаи его выхода из строя.

Настоящий бэкап защищает и от этого.

   Mikhail Volkov

56 — 23.03.21 — 14:15

(55) SQL-бэкап возможно был, но восстановить из него файловый вариант базы не получилось.

   Kassern

57 — 23.03.21 — 14:16

(56) вот в этом направлении и нужно было копать и автоматизировать, а не забить и параллельно запустить дт бекапы

   Kassern

58 — 23.03.21 — 14:16

(56) разобрались почему не получилось восстановить бекап?

   mistеr

59 — 23.03.21 — 14:18

(56) Из скульного бэкапа пытались получить файловую базу? Да вы там шутники однако.

   Mikhail Volkov

60 — 24.03.21 — 09:01

   Mikhail Volkov

61 — 09.09.21 — 10:57

При завершении работы пользователя выполняется предопределенная процедура ПередЗавершениемРаботыСистемы(). В ней проверяется последний ли пользователь. Если последний, то запускается bat-файл архивации. Но замечено что иногда последнему как-то удается завершить свою работу в Альфа-Авто и терминале (обычно это кассир завершает свою работу не с рабочего компьютера, а с домашнего) минуя эту предопределенную процедуру, и bat-файл не выполняется. Хотя в журнале регистрации есть запись события: Сеанс. Завершение.

Не пойму как такое возможно?

   Mikhail Volkov

62 — 09.09.21 — 14:29

Может пользователь завершил терминальный сеанс не закрыв Альфа-Авто, она завершилась аварийно?

   Mikhail Volkov

63 — 14.09.21 — 10:51

Для RDP ведется какой ни будь журнал регистрации подобный ЖР 1С, можно посмотреть когда начат сеанс RDP пользователем: состояние Активно/Отключено, а когда он вышел: не показывает состояние? Как?

   ildary

64 — 14.09.21 — 15:23

(63) погуглите «Журнал событий Windows»

   Mikhail Volkov

65 — 14.09.21 — 17:25

(64) Ссылок на проконтролировать вход по RDP много, а на проконтролировать выход из RDP не нашел. Хочется знать всегда ли выполняется предопределенная процедура ПриЗавершенииРаботыСистемы(), даже при аварийном завершении 1С, при закрытии сеанса RDP?

   Mikhail Volkov

66 — 16.09.21 — 08:40

Например вчера 15.09.2021 20:34:37 по ЖР 1С есть запись Сеанс. Завершение. В журнале Безопасность этому пользователю соответствуют две записи категории «Выход из системы»:

15.09.2021 20:34:31 код события: 4647 Данное событие возникает, когда выход начат. Дальнейшие действия, запрошенные пользователем, не выполняются.  Данное событие можно рассматривать как событие выхода.

15.09.2021 20:35:07 код события: 4634 Данное событие возникает при уничтожении сеанса входа. Его можно однозначно связать с событием входа с помощью значения «Код входа». Коды входа остаются уникальными после перезагрузки, но они уникальны только на одном компьютере. Тип входа: 3

В чем некорректность выхода: можно определить?

   mistеr

67 — 16.09.21 — 11:11

(61) >В ней проверяется последний ли пользователь.

Ставлю на то, что проверка кривая.

   mistеr

68 — 16.09.21 — 11:12

У меня в одном месте сделано так. Проверка в самом bat файле, что нет активных сеансов, и если есть, то архивация не выполняется.

   Mikhail Volkov

69 — 16.09.21 — 12:24

(68) Пожалуйста, выложи текст этой проверки!?

Разобрался, при закрытии сеанса RDP предопределенная процедура ПриЗавершенииРаботыСистемы() не выполняется. Но запись в ЖР Сеанс. Завершение делается. Где, как отловить это событие в 1С?

   mistеr

70 — 16.09.21 — 13:38

(69) Там файловая, просто проверяется наличие lock-файлов в папке с базой.

   Mikhail Volkov

71 — 17.09.21 — 09:23

(70) Для SQL-базы это не пойдет.

Но запись в ЖР Сеанс. Завершение делается. Где, на уровне платформы? Конфигуратором туда не добраться?

Еще заметил, что перед каждой записью в ЖР Сеанс. Завершение делается более 3-х записей событий: Данные. Изменение в Регистр сведений. Значения свойств объектов. Каких объектов, какие свойства неизвестно. Можно как-то под настроить ЖР, чтобы знать что за объекты?

   Mikhail Volkov

72 — 18.09.21 — 09:58

Выяснил в Регистр сведений. Значения свойств объектов пишется свойства оборудования — кассы при завершении работы пользователя, вызывается в конечном счете из предопределенной процедуры ПриЗавершенииРаботыСистемы().

   Mikhail Volkov

73 — 20.09.21 — 09:15

Обычно жалуются, что Активные пользователи в 1С остаются после отключение пользователя от RDP. У меня такой проблемы нет. Но в теме https://1s-forum.fun/showthread.php/201142-Активные-пользователи-в-1С-остаются-после-отключение-пользователя-от-RDP дан совет: «укажите в свойствах РДП — не отключение сеанса — а завершение, с переопределением пользовательских настроек». Мне бы наоборот, только где конкретно в свойствах RDP?

   SiAl-chel

74 — 20.09.21 — 11:56

(73) Версию Windows Server озвучь.

   Mikhail Volkov

75 — 20.09.21 — 12:31

(74) 2008R2

   Mikhail Volkov

76 — 22.09.21 — 17:01

https://pro1c.org.ua/index.php?showtopic=26358 «Пуск» — «Все программы»-«Администрирование»-«Настройка служб терминалов» — нет у меня на сервере терминалов!?

И «Пуск» — «Выполнить»- «%SystemRoot%system32tscc.msc /s» — не удается найти tscc.msc?

  

Mikhail Volkov

77 — 26.09.21 — 13:03

В bat-файле для получения dt-выгрузки базы прописана строка:

«C:Program Files (x86)1cv88.3.10.2466bin1cv8s.exe» DESIGNER /S «Сервербаза» /N»Администратор» /P»Пароль» /DumpIB %BakName% /Out %LogName% -NoTruncate /DisableStartupMessages /UC AllowRobotLogon

Он запускается заданием, которое обычно запускается из 1С при завершении работы последнего пользователя из предопределенной процедуры ПриЗавершенииРаботыСистемы(). Перед его запуском в 1С проверяется: открыт ли конфигуратор, если он открыт, то он закрывается процедурой (23).

А есть ли другой способ закрыть конфигуратор? Вроде встречал команду для командной строки, выгоняющую всех пользователей из базы. Она закрывает конфигуратор, если он открыт? Или есть команда проверяющая открыт ли конфигуратор, или кто-то есть в базе (в серверной SQL)?

  • Произошла исключительная ситуация ошибка выполнения microsoft vbscript
  • Произошла критическая ошибка tlauncher
  • Произошла исключительная ситуация ошибка выполнения microsoft jscript разрешение отклонено
  • Произошла критическая ошибка the server returned a 500 whoops looks like something went wrong
  • Произошла исключительная ситуация winhttp winhttprequest ошибка поддержки безопасных каналов