Остановка сервера 1С без потери данных и зависших процессов

· 9 мин

Содержание

Сервер 1С:Предприятия 8.3 останавливают остановкой службы агента: в Windows это служба «Агент сервера 1С:Предприятия 8.3», в Linux — юнит srv1cv8. Но сначала нужно запретить новые сеансы и закрыть текущие в консоли кластера, иначе пользователи потеряют несохранённые документы, а служба может зависнуть в состоянии «Остановка».

Типичная ситуация: вечером надо поставить новую платформу или перезагрузить сервер после обновлений Windows, а в базе ещё сидят кладовщик и пара фоновых заданий обмена. Чтобы остановить сервер 1С Предприятие спокойно, действуйте по порядку и держите под рукой запасные способы на случай, когда штатный не срабатывает.

Подготовка: что сделать до остановки сервера 1С

Остановка службы обрывает все сеансы сразу, во всех базах кластера. Поэтому сначала решите три вопроса.

  • 👥 Кого затронет. На одном сервере часто живут бухгалтерия, ЗУП и торговля. Остановка касается всех баз кластера, а не одной.
  • ⏰ Когда. Лучше вне рабочего времени и не во время ночных регламентных заданий: обменов, загрузки выписок, закрытия месяца.
  • 💾 Есть ли свежая копия. Если после остановки планируется обновление платформы или конфигурации, сделайте резервную копию базы средствами СУБД заранее.

Минимальный порядок действий:

  1. Предупредите пользователей письмом или сообщением за 15–30 минут.
  2. Включите блокировку начала сеансов в каждой базе, которую затронет работа.
  3. Дождитесь, пока пользователи выйдут, оставшиеся сеансы завершите принудительно.
  4. Остановите службу агента сервера.
  5. Проверьте, что процессы ragent, rmngr и rphost исчезли.

СУБД (MS SQL Server или PostgreSQL) — отдельная служба. Для перезапуска сервера 1С её останавливать не нужно. Останавливайте СУБД, только если перезагружаете машину целиком или обслуживаете саму СУБД.

Как остановить сервер 1С через консоль администрирования кластера

Оснастка «Администрирование серверов 1С Предприятия» — самый наглядный способ подготовить сервер к остановке. Она подключается к агенту сервера по порту 1540.

Блокировка начала сеансов

  1. Откройте консоль, раскройте Центральные серверы 1С:Предприятия → <имя сервера> → Кластеры → <кластер> → Информационные базы.
  2. Правой кнопкой по базе → Свойства. Введите логин и пароль администратора этой информационной базы.
  3. Установите флажок «Блокировка начала сеансов включена».
  4. Заполните «Сообщение о блокировке» — пользователи увидят его при попытке входа.
  5. Задайте «Код разрешения». С ним вы сами сможете зайти в заблокированную базу, добавив к строке запуска параметр /UC<код>.
  6. При необходимости отметьте «Блокировка регламентных заданий включена», чтобы фоновые задачи не запускались заново.

Время начала и конца блокировки можно задать заранее. Платформа сама начнёт выводить пользователям предупреждения о скором завершении работы.

Завершение оставшихся сеансов

  1. В той же ветке кластера откройте узел Сеансы.
  2. Отсортируйте список по базе и пользователю.
  3. Выделите сеансы и выберите Удалить в контекстном меню.

Принудительное удаление сеанса обрывает работу пользователя: всё, что он не записал, пропадёт. Транзакция, которая выполнялась в момент удаления, будет отменена СУБД, поэтому проведённые ранее документы не пострадают.

Если в списке висит сеанс «Фоновое задание» и после удаления он появляется снова — вы не включили блокировку регламентных заданий.

Остановка службы агента сервера в Windows и Linux

Агент сервера (ragent) — родительский процесс. Когда служба останавливается штатно, агент сам гасит менеджер кластера (rmngr) и рабочие процессы (rphost).

Windows: оснастка «Службы»

  1. Нажмите Win+R, введите services.msc.
  2. Найдите «Агент сервера 1С:Предприятия 8.3 (x86-64)». Для 32-битного сервера — без суффикса x86-64.
  3. Правой кнопкой → Остановить.

Если на машине стоит несколько версий платформы, служб может быть несколько. Откройте свойства службы и посмотрите путь к ragent.exe в поле «Исполняемый файл» — в нём указан номер версии.

Windows: командная строка и PowerShell

Узнать точное имя службы:

sc query state= all | findstr /i "1C"

Остановить и запустить (имя подставьте своё, в кавычках):

net stop "1C:Enterprise 8.3 Server Agent (x86-64)"
net start "1C:Enterprise 8.3 Server Agent (x86-64)"

То же в PowerShell, без необходимости знать имя точно:

Get-Service | Where-Object { $_.DisplayName -like "*1С:Предприятия*" -or $_.Name -like "*1C*" }
Get-Service -Name "1C:Enterprise 8.3 Server Agent (x86-64)" | Stop-Service -Force

Если рядом работает служба сервера администрирования (ras), её можно оставить: она не держит сеансы пользователей.

Linux: systemd и init-скрипт

Начиная с платформы 8.3.21 сервер под Linux ставится с юнитом systemd, в имени которого есть номер версии:

systemctl list-units --all | grep srv1cv8
sudo systemctl stop srv1cv8-8.3.25.1374@default
sudo systemctl status srv1cv8-8.3.25.1374@default

На более ранних версиях используется init-скрипт:

sudo /etc/init.d/srv1cv83 stop
# или
sudo systemctl stop srv1cv83

Номер версии в примере условный — возьмите свой из вывода list-units.

Если служба зависла: завершаем процессы ragent, rmngr, rphost

Бывает, что служба висит в состоянии «Остановка» по 5–10 минут и дольше. Чаще всего рабочий процесс ждёт окончания долгой серверной операции или зависшего запроса к СУБД.

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

Через Диспетчер задач

  1. Откройте Ctrl+Shift+Esc → вкладка «Подробности».
  2. Отсортируйте по имени, найдите rphost.exe, rmngr.exe, ragent.exe.
  3. Завершайте в порядке: сначала все rphost.exe, затем rmngr.exe, последним ragent.exe.

Добавьте колонку «Имя пользователя»: процессы сервера работают от служебной учётной записи (часто USR1CV8). Так вы не перепутаете их с процессами клиента 1С, запущенного на этом же сервере.

Через командную строку

taskkill /F /IM rphost.exe
taskkill /F /IM rmngr.exe
taskkill /F /IM ragent.exe

В Linux аналог — sudo pkill -9 rphost, затем rmngr и ragent. После этого служба переходит в состояние «Остановлена», и её можно запускать снова.

Управление сервером из командной строки: утилита rac

Утилита rac делает то же, что консоль кластера, но из скрипта. Она работает не напрямую с агентом, а через сервер администрирования ras (по умолчанию порт 1545). Поэтому сначала запустите ras:

cd "C:\Program Files\1cv8\8.3.25.1374\bin"
ras cluster

ras можно оставить в отдельном окне или зарегистрировать как службу. Дальше — команды rac в другом окне.

Получить идентификаторы

rac cluster list
rac infobase summary list --cluster=<id_кластера>
rac session list --cluster=<id_кластера>

Если у кластера задан администратор, к каждой команде добавьте --cluster-user=<логин> --cluster-pwd=<пароль>.

Заблокировать базу и закрыть сеансы

rac infobase update --cluster=<id_кластера> --infobase=<id_базы> ^
  --infobase-user=Администратор --infobase-pwd=<пароль> ^
  --sessions-deny=on --scheduled-jobs-deny=on ^
  --denied-message="Плановые работы на сервере" --permission-code=12345

rac session terminate --cluster=<id_кластера> --session=<id_сеанса>

После работ снимите блокировку той же командой с --sessions-deny=off --scheduled-jobs-deny=off. Остальные параметры смотрите в rac help infobase и rac help session.

Самой службы агента rac не останавливает — для этого служат net stop или systemctl, как описано выше.

Почему сервер 1С не останавливается: диагностика и журналы

Если служба зависает регулярно, ищите причину, а не убивайте процессы каждый раз.

Диагностика: выберите симптом

Где смотреть журналы

  • 📋 Журнал событий Windows → «Журналы Windows → Приложение». Источник — 1C:Enterprise 8. Здесь видно, почему служба не стартует.
  • 📂 Каталог кластера srvinfo. По умолчанию при установке службой это C:\Program Files\1cv8\srvinfo, внутри — папка reg_1541 с реестром кластера 1CV8Clst.lst.
  • 🔍 Технологический журнал. Включается файлом logcfg.xml в каталоге conf платформы. Для диагностики зависаний собирают события EXCP (исключения) и TLOCK/TDEADLOCK (блокировки).

Пример минимального logcfg.xml для поиска причин сбоев рабочих процессов:

<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://v8.1c.ru/v8/tech-log">
  <log location="C:\1C_TechLog" history="24">
    <event>
      <eq property="name" value="EXCP"/>
    </event>
    <property name="all"/>
  </log>
</config>

Не оставляйте технологический журнал с широким набором событий включённым надолго: он быстро занимает десятки гигабайт и сам замедляет сервер.

Очищать snccntx* можно только при полностью остановленной службе. Файл 1CV8Clst.lst не удаляйте: в нём список баз кластера. Перед любыми манипуляциями скопируйте всю папку reg_1541.

Автоматическая остановка и перезапуск по расписанию

Ночной перезапуск сервера освобождает память рабочих процессов и закрывает забытые сеансы. Часть этой задачи решает сам кластер: в свойствах кластера есть интервал перезапуска рабочих процессов и допустимый объём памяти. Полная остановка службы нужна реже — перед обновлением платформы или перезагрузкой.

Планировщик заданий Windows

  1. Сохраните скрипт из следующего раздела как C:\Scripts\1c_restart.bat.
  2. Создайте задание командой от имени администратора:
schtasks /Create /TN "1C restart" /TR "C:\Scripts\1c_restart.bat" /SC DAILY /ST 03:00 /RU SYSTEM /RL HIGHEST
  1. Проверьте задание разовым запуском: schtasks /Run /TN "1C restart".

cron в Linux

# перезапуск сервера 1С каждую ночь в 03:00
0 3 * * * /usr/bin/systemctl restart srv1cv8-8.3.25.1374@default

Выбирайте время так, чтобы не пересечься с резервным копированием СУБД и ночными обменами. Если обмен запущен в 02:30 и идёт час, перезапуск в 03:00 его оборвёт.

Скрипт: остановка сервера 1С и резервная копия

Скрипт ниже делает полный цикл: останавливает службу, добивает зависшие процессы, копирует каталог кластера, выгружает базу MS SQL и снова запускает сервер. Пути, имя службы и базы замените своими.

@echo off
setlocal
set SVC=1C:Enterprise 8.3 Server Agent (x86-64)
set SRVINFO=C:\Program Files\1cv8\srvinfo
set BACKUP=D:\Backup\1C
set DB=buh
for /f %%i in ('powershell -NoProfile -Command "Get-Date -Format yyyy-MM-dd_HHmm"') do set STAMP=%%i

echo Останавливаем службу...
net stop "%SVC%"
timeout /t 30 /nobreak >nul

rem Если что-то осталось - завершаем принудительно
taskkill /F /IM rphost.exe >nul 2>&1
taskkill /F /IM rmngr.exe  >nul 2>&1
taskkill /F /IM ragent.exe >nul 2>&1

echo Копируем реестр кластера...
robocopy "%SRVINFO%" "%BACKUP%\srvinfo_%STAMP%" /E /R:1 /W:1 >nul

echo Резервная копия базы в SQL Server...
sqlcmd -S localhost -E -Q "BACKUP DATABASE [%DB%] TO DISK='%BACKUP%\%DB%_%STAMP%.bak' WITH INIT, COMPRESSION"

echo Запускаем службу...
net start "%SVC%"
endlocal

Пояснения:

  • 🧩 robocopy с /E копирует и вложенные папки, включая reg_1541. Это страховка на случай повреждения реестра кластера.
  • 🗄️ Резервную копию в SQL Server можно делать и без остановки 1С. В скрипте она стоит внутри окна простоя только для согласованности с копией реестра. COMPRESSION не поддерживается в редакции Express — уберите этот параметр, если sqlcmd выдаёт ошибку.
  • ⏱ Пауза 30 секунд даёт агенту штатно завершить рабочие процессы. На загруженном сервере увеличьте её до 60–120.

Для PostgreSQL в Linux вместо sqlcmd используйте pg_dump:

sudo systemctl stop srv1cv8-8.3.25.1374@default
sudo -u postgres pg_dump -Fc -f /backup/buh_$(date +%F_%H%M).dump buh
sudo cp -a /home/usr1cv8/.1cv8/1C/1cv8 /backup/srvinfo_$(date +%F)
sudo systemctl start srv1cv8-8.3.25.1374@default

Каталог кластера в Linux зависит от того, как ставили сервер: по умолчанию он в домашней папке пользователя usr1cv8. Точный путь виден в параметре -d строки запуска ragent (ps aux | grep ragent).

Копия .dt из Конфигуратора не заменяет резервную копию СУБД для серверной базы: выгрузка требует монопольного доступа и на больших базах идёт часами. Для ежедневного бэкапа используйте средства СУБД.

Частые вопросы

Можно ли остановить только одну базу, не трогая остальные?
Остановить базу отдельно нельзя, но можно сделать её недоступной: включить блокировку начала сеансов и завершить сеансы этой базы. Остальные базы кластера продолжат работать.
Пострадают ли данные, если просто выключить сервер?
В клиент-серверном варианте данные хранит СУБД, незавершённые транзакции она откатит. Пропадёт то, что пользователи не записали. Рискованнее внезапное выключение самой СУБД — для неё нужна штатная остановка.
Нужно ли останавливать сервер 1С для обновления конфигурации?
Нет. Для обновления структуры базы нужен монопольный доступ к этой базе, а не остановка сервера: заблокируйте сеансы, завершите их и обновите через Конфигуратор. Остановка службы нужна при смене версии платформы.
Как зайти в заблокированную базу самому?
Добавьте к параметрам запуска /UC и код разрешения, заданный при блокировке. Например, /UC12345 в поле «Дополнительные параметры запуска» в настройках базы в окне запуска.
Почему после остановки службы в Диспетчере задач остаётся rphost.exe?
Рабочий процесс ждёт окончания операции или запроса к СУБД. Подождите 1–2 минуты, затем завершите его вручную через taskkill /F /IM rphost.exe.