Зависла программа 1С: как завершить сеанс и освободить базу
Содержание
Чтобы снять зависшую задачу в 1С, завершите сеанс пользователя: в клиент-серверной базе — через консоль Администрирование серверов 1С Предприятия (база → Сеансы → правой кнопкой → Удалить) или командой rac session terminate, в файловой — снятием процесса 1cv8.exe или 1cv8c.exe в Диспетчере задач. Сервер откатит незавершённую транзакцию, и база освободится.
Если программа зависла у одного человека, это пять минут работы. Хуже, когда зависший сеанс держит блокировку и за ним встаёт очередь из десятка бухгалтеров. Тогда действуйте по нарастающей: от мягкой остановки клиента к сеансу, рабочему процессу и только потом к СУБД.
Что именно зависло: клиент, сеанс или весь сервер
Перед тем как что-то снимать, поймите масштаб. От этого зависит инструмент.
| Симптом | Что зависло | С чего начать |
|---|---|---|
| Не отвечает окно у одного пользователя, у остальных всё работает | Клиентское приложение или один сеанс | Подождать, затем снять процесс клиента |
| У всех висит один и тот же документ или проведение | Сеанс держит блокировку, остальные ждут | Найти виновника в консоли и завершить его сеанс |
| Не открывается база ни у кого, вход «крутится» | Рабочий процесс rphost или менеджер кластера | Консоль, затем перезапуск рабочего процесса |
| Не работает консоль администрирования | Служба агента сервера | Перезапуск службы в нерабочее время |
Быстрые проверки перед вмешательством:
- 🕐 Сколько висит. Закрытие месяца или пересчёт себестоимости законно идут 20–40 минут. Прерывать такую операцию на середине — значит начинать её заново.
- ⌨️ Пробовали ли прервать. В толстом клиенте и в Конфигураторе долгую процедуру прерывают сочетанием
Ctrl+Break. Это мягче любого снятия процесса. - 📊 Нагрузка на сервер. В Диспетчере задач посмотрите процессор и память у
rphost.exeи у СУБД. Сто процентов процессора — признак долгого запроса, ноль — признак ожидания блокировки.
Ожидание блокировки по умолчанию длится 20 секунд, после чего пользователь получает ошибку Конфликт блокировок при выполнении транзакции. Если окно висит минуты, а ошибки нет, дело обычно не в блокировке, а в долгом запросе или зависшем клиенте.
Как снять зависшую задачу в файловой базе
В файловом варианте сервера нет: каждый клиент сам работает с файлом 1Cv8.1CD. Поэтому «снять задачу» значит завершить процесс клиента на том компьютере, где он запущен.
- Откройте Диспетчер задач (
Ctrl+Shift+Esc), вкладкуПодробности. - Найдите
1cv8c.exe(тонкий клиент) или1cv8.exe(толстый клиент и Конфигуратор). - Если у пользователя открыто несколько баз, ориентируйтесь по столбцу «Имя пользователя» и по времени процессора.
- Нажмите
Снять задачу.
На терминальном сервере то же самое удобно сделать из командной строки администратора:
tasklist /v /fi "imagename eq 1cv8c.exe"
taskkill /pid 4812 /f
Номер процесса 4812 здесь для примера, подставьте свой из вывода tasklist.
Снятие процесса обрывает работу пользователя без сохранения. Документ, который он редактировал, останется в последнем записанном состоянии. Предупредите человека заранее.
Если база после этого всё равно пишет, что она занята, проверьте, не осталось ли процессов клиента на других рабочих местах. Удалять служебный файл 1Cv8.1CL можно только когда все пользователи вышли и ни одного процесса 1С с этой базой не запущено. Иначе можно повредить базу.
Снятие задачи через консоль администрирования серверов 1С
В клиент-серверном варианте главный инструмент — оснастка Администрирование серверов 1С Предприятия. Консоль подключается к агенту сервера на порту 1540.
Если консоль не открывается
Типичная ситуация после обновления платформы: оснастка открывается с ошибкой или пустой. Зарегистрируйте библиотеку консоли той версии платформы, которая стоит на сервере. Командная строка от имени администратора:
regsvr32 "C:\Program Files\1cv8\8.3.24.1548\bin\radmin.dll"
Номер версии в пути замените на свой. Версия консоли должна совпадать с версией сервера.
Порядок действий
- Разверните дерево:
Central 1C:Enterprise 8.3 servers→ ваш сервер →Кластеры→ кластер →Информационные базы→ нужная база →Сеансы. - Найдите сеанс по пользователю и компьютеру. Столбец «Приложение» подскажет, что это: тонкий клиент, Конфигуратор, фоновое задание или COM-соединение.
- Отсортируйте по времени текущего вызова: зависший сеанс обычно выделяется большим числом.
- Правой кнопкой по сеансу →
Удалить. Подтвердите.
Через несколько секунд сеанс исчезнет из списка. Пользователь увидит сообщение о разрыве соединения и сможет войти заново.
Удаление сеанса откатывает его незавершённую транзакцию. Если человек проводил большой документ или шла загрузка данных, всё сделанное в этой транзакции пропадёт. Выясните, что он делал, прежде чем удалять.
Как очистить очередь фоновых заданий
Часто зависает не человек, а фоновое задание: обмен, загрузка выписки, пересчёт итогов. В консоли такие сеансы видны с приложением «Фоновое задание», их удаляют так же.
Чтобы новые задания не встали в очередь, пока вы разбираетесь, откройте свойства информационной базы в консоли и включите флажок Блокировка регламентных заданий включена. После наведения порядка флажок обязательно снимите, иначе обмены и регламентные операции перестанут запускаться.
В типовых конфигурациях на БСП посмотреть и отменить задания можно и из самой программы: в разделе Администрирование → Обслуживание есть список регламентных и фоновых заданий с командой отмены.
Как завершить сеанс 1С из командной строки через rac
Когда консоли нет (сервер на Linux, доступ только по SSH) или задачу нужно автоматизировать, используйте утилиты ras и rac из каталога bin платформы.
Шаг 1. Запустите сервер администрирования
rac работает не напрямую с кластером, а через сервер администрирования ras. Если он не запущен как служба, запустите его:
ras cluster --port=1545
По умолчанию rac обращается к localhost:1545, поэтому на том же сервере адрес можно не указывать.
Шаг 2. Найдите кластер, базу и сеанс
rac cluster list
rac infobase summary list --cluster=<uuid кластера>
rac session list --cluster=<uuid кластера> --infobase=<uuid базы>
В выводе session list смотрите поля:
- 👤
user-nameиhost— кто и откуда; - 🧩
app-id— тип приложения (1CV8C,Designer,BackgroundJobи т. д.); - ⏱️
duration-currentиduration-current-dbms— сколько длится текущий вызов и какая его часть ушла в СУБД; - 🔒
blocked-by-lsиblocked-by-dbms— номер сеанса, который блокирует этот.
Последние два поля и есть ответ на вопрос, кто держит очередь. Если у десяти сеансов там один и тот же номер, завершать нужно именно его.
Шаг 3. Завершите сеанс
rac session terminate --cluster=<uuid кластера> --session=<uuid сеанса>
Если на кластере заданы администраторы, добавьте к каждой команде --cluster-user=<имя> и --cluster-pwd=<пароль>. Остальные параметры смотрите в справке rac help session.
Не храните пароль администратора кластера открытым текстом в bat-файлах на общих дисках. Скрипт с таким паролем — полный доступ ко всем базам сервера.
Если сеанс не удаляется: рабочий процесс и служба сервера
Бывает, что сеанс после удаления висит в списке, а база так и не отвечает. Значит, завис сам рабочий процесс rphost, который обслуживает этот сеанс. Действуйте в таком порядке, от мягкого к жёсткому.
Снять один рабочий процесс
- В консоли откройте
Кластеры→ кластер →Рабочие процессы. - Найдите процесс, у которого растёт память или стоит большое время ответа. Запишите его PID.
- На сервере в Диспетчере задач (вкладка
Подробности) найдитеrphost.exeс этим PID и снимите задачу.
Менеджер кластера rmngr сам запустит новый рабочий процесс. Все сеансы, которые обслуживал снятый rphost, оборвутся — а их могут быть десятки, из разных баз. Делайте это, только когда остальные варианты не сработали, и предупредите пользователей.
Перезапустить службу агента сервера
Если зависли rmngr или ragent (консоль не подключается, новые сеансы не создаются), остаётся перезапуск службы. На Windows она называется вида Агент сервера 1С:Предприятия 8.3. На Linux найдите имя юнита командой:
systemctl list-units | grep srv1cv8
и перезапустите его через systemctl restart.
Перезапуск службы завершает все сеансы во всех базах кластера. Делайте его вне рабочего времени или после общего предупреждения.
Очистка кэша сервера
Если и после перезапуска кластер ведёт себя странно (в консоли «призрачные» сеансы, ошибки при входе), администраторы чистят сеансовые данные. Порядок:
- Остановите службу агента сервера.
- Сделайте копию каталога
srvinfoцеликом. - В каталоге
srvinfo\reg_1541удалите папкиsnccntx*. - Запустите службу.
Остальные файлы в reg_1541 не трогайте: там лежит реестр кластера со списком баз. Пересоздавать кластер ради «очистки» не нужно и опасно.
Анализ блокировок: кто держит очередь
Снимать сеансы наугад — плохая идея. Если завершить не того, очередь останется. Найдите корень.
Управляемые блокировки 1С
В консоли у кластера и у каждой базы есть узел Блокировки. Там видно, какие объекты и каким сеансом заблокированы. Сопоставьте номер сеанса с узлом Сеансы, и станет понятно, кто держит, например, регистр остатков на складе.
Типичная картина: один пользователь открыл проведение крупной реализации или перепроведение за месяц, остальные пытаются провести документы по тем же номенклатуре и складу и ждут.
Когда завершать, а когда подождать
Как снять блокировку в SQL Server или PostgreSQL
На уровень СУБД спускаются, когда в 1С вызов показывает, что время уходит в базу данных (duration-current-dbms растёт), а виновника по сеансам 1С не видно. Это работа для администратора с правами на сервер СУБД.
Microsoft SQL Server
Найдите заблокированные запросы и того, кто их блокирует:
SELECT session_id, blocking_session_id, wait_type, wait_time, status, command
FROM sys.dm_exec_requests
WHERE blocking_session_id <> 0;
Номер в blocking_session_id — соединение-виновник. Его текущий запрос и программу смотрят в sys.dm_exec_sessions. Завершить соединение:
KILL 87;
Число 87 — пример, подставьте свой номер сессии.
PostgreSQL
SELECT pid, pg_blocking_pids(pid) AS blocked_by, state, now() - query_start AS duration, left(query, 80)
FROM pg_stat_activity
WHERE cardinality(pg_blocking_pids(pid)) > 0;
Сначала попробуйте отменить только запрос, оставив соединение:
SELECT pg_cancel_backend(12345);
Если не помогло — разорвать соединение целиком:
SELECT pg_terminate_backend(12345);
Убитое в СУБД соединение принадлежит рабочему процессу 1С, а не конкретному пользователю. Транзакция откатится, а сеанс 1С получит ошибку обращения к базе. Никогда не правьте данные таблиц 1С запросами напрямую — только завершайте соединения.
Как не допускать зависаний: таймауты и настройки кластера
Снять задачу — это лечение симптома. Чтобы ситуация не повторялась каждую неделю, настройте несколько параметров.
| Где | Параметр | Что даёт |
|---|---|---|
Конфигуратор → Администрирование → Параметры информационной базы | Таймаут блокировки данных | Сколько секунд сеанс ждёт блокировку, прежде чем получить ошибку. По умолчанию 20 |
| Свойства кластера в консоли | Интервал перезапуска | Плановый перезапуск рабочих процессов, чтобы они не копили память неделями |
| Свойства кластера в консоли | Допустимый объём памяти и интервал превышения | Процесс, который надолго вышел за лимит, будет перезапущен автоматически |
| Свойства кластера в консоли | Выключенные процессы останавливать через | Сколько ждать завершения сеансов на выключенном процессе перед принудительной остановкой |
Организационные меры работают не хуже настроек:
- 📅 Тяжёлые операции — вне пиковых часов. Закрытие месяца, перепроведение, свёртку базы запускайте вечером или с блокировкой работы пользователей.
- 🔁 Обмены не внахлёст. Если два регламентных обмена пишут в одни регистры одновременно, они будут ждать друг друга. Разнесите расписание хотя бы на 10–15 минут.
- 🧹 Обслуживание СУБД. Регулярное обновление статистик и перестроение индексов снижает число долгих запросов.
- 🚪 Работы с монопольным доступом — через блокировку начала сеансов. В свойствах базы в консоли включите блокировку с кодом разрешения, а сами входите с параметром
/UC<код>.
Частые вопросы
Пропадут ли данные, если удалить сеанс в консоли?
Можно ли завершить сеанс 1С без прав администратора кластера?
Почему после удаления сеанса лицензия не освобождается сразу?
Почему база зависает всегда в одно и то же время?
Что делать, если пароль администратора кластера утерян?
srvinfo или обратитесь к администратору, который настраивал сервер.