База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как устранить ошибку vrunner при подключении к хранилищу 1С? › Ответ в теме: Как устранить ошибку vrunner при подключении к хранилищу 1С?
Артур, приветствую.
Проблема с vrunner и хранилищем конфигурации 1С, которую вы описываете, связана с тем, что команда vrunner unbindrepo не всегда корректно завершает сессию подключения базы к хранилищу, из-за чего в панели администрирования хранилища остаётся «зависший» сеанс. Это приводит к конфликтам при повторном связывании (bindrepo) и обновлении базы (updatedb), так как хранилище считает, что пользователь уже связан с другой базой.
Вот подробный разбор и рекомендации по решению:
1. **Почему vrunner unbindrepo не завершает сессию полностью?**
Команда unbindrepo должна отвязать базу от хранилища, но в некоторых случаях (например, при прерывании процесса, сетевых сбоях, или ошибках в vrunner) сессия остаётся активной в хранилище. Это баг или ограничение текущей версии vrunner/хранилища.
2. **Ручное удаление сеанса в панели администрирования хранилища**
Вы уже заметили, что без ручного удаления сеанса из панели администрирования хранилища невозможно корректно выполнить bindrepo и updatedb. Это стандартное поведение, так как хранилище не позволяет одному пользователю иметь несколько активных связей.
3. **Почему при удалении сеанса из панели администрирования падает обновление на updatedb?**
При насильственном удалении сеанса база может остаться в состоянии, когда метаданные или внутренние ссылки на хранилище не синхронизированы. В результате обновление конфигурации падает с критической ошибкой.
4. **Рекомендации по устранению проблемы:**
— **Используйте последовательность команд с контролем состояния:**
Перед выполнением unbindrepo убедитесь, что база не занята и нет активных пользователей. После unbindrepo проверьте через API или консоль хранилища, что сессия действительно завершена. Если нет — удалите вручную.
— **Автоматизация удаления зависших сессий:**
Можно написать скрипт, который через API хранилища или через консоль администрирования будет проверять и удалять «зависшие» сессии перед выполнением bindrepo. Это позволит избежать ручного вмешательства.
— **Используйте команду vrunner unbindrepo с параметрами ожидания и повторов:**
В новых версиях vrunner есть параметры, позволяющие повторять попытки отвязки и ждать освобождения сессии. Обновите vrunner до последней версии и используйте эти возможности.
— **Обновление vrunner и платформы 1С:**
Убедитесь, что у вас актуальная версия vrunner и платформы 1С, так как в новых версиях исправлены многие баги, связанные с управлением сессиями хранилища.
— **Избегайте насильственного удаления сеансов во время активных операций:**
Если приходится удалять сеанс вручную, делайте это только когда база не используется, и после этого перезапускайте службу сервера 1С, чтобы очистить кэш и сбросить состояние.
— **Используйте отдельные логины для каждой базы:**
Как правило, для каждой базы, подключаемой к хранилищу, должен быть свой логин. Это уменьшит конфликты с сессиями.
5. **Пример автоматизации проверки и удаления сессий (псевдокод):**
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
// Получить список активных сессий хранилища через API Сессии = ПолучитьСессииХранилища(); // Проверить, есть ли сессия с нужным логином Если Сессии.Содержит(Логин) Тогда // Удалить сессию УдалитьСессию(Логин); // Подождать освобождения Ждать(5); // секунд КонецЕсли; // Выполнить vrunner unbindrepo ВыполнитьКоманду("vrunner unbindrepo ..."); // Выполнить vrunner bindrepo ВыполнитьКоманду("vrunner bindrepo ..."); |
6. **Если проблема повторяется часто — рассмотрите переход на клиент-серверный вариант хранилища или использование более стабильных средств обновления.**
—
**Итог:**
Ошибка с vrunner и зависшими сессиями — известная проблема, связанная с тем, что unbindrepo не всегда корректно завершает сессию. Чтобы победить ошибку, нужно:
— Обновить vrunner и платформу 1С до последних версий.
— Автоматизировать проверку и удаление зависших сессий через API хранилища перед bindrepo.
— Избегать насильственного удаления сессий во время активных операций, а если удаляете — перезапускать сервер 1С.
— Использовать отдельные логины для каждой базы, чтобы избежать конфликтов.
https://infostart.ru/public/1013337/ (раздел про ошибки хранилища)
https://infostart.ru/1c/articles/568518/ (восстановление после ошибок сессий)
Если нужна помощь с написанием скрипта для автоматизации удаления сессий — могу помочь.
Удачи!