Остановка сервера 1С без потери данных и зависших процессов
Содержание
Сервер 1С:Предприятия 8.3 останавливают остановкой службы агента: в Windows это служба «Агент сервера 1С:Предприятия 8.3», в Linux — юнит srv1cv8. Но сначала нужно запретить новые сеансы и закрыть текущие в консоли кластера, иначе пользователи потеряют несохранённые документы, а служба может зависнуть в состоянии «Остановка».
Типичная ситуация: вечером надо поставить новую платформу или перезагрузить сервер после обновлений Windows, а в базе ещё сидят кладовщик и пара фоновых заданий обмена. Чтобы остановить сервер 1С Предприятие спокойно, действуйте по порядку и держите под рукой запасные способы на случай, когда штатный не срабатывает.
Подготовка: что сделать до остановки сервера 1С
Остановка службы обрывает все сеансы сразу, во всех базах кластера. Поэтому сначала решите три вопроса.
- 👥 Кого затронет. На одном сервере часто живут бухгалтерия, ЗУП и торговля. Остановка касается всех баз кластера, а не одной.
- ⏰ Когда. Лучше вне рабочего времени и не во время ночных регламентных заданий: обменов, загрузки выписок, закрытия месяца.
- 💾 Есть ли свежая копия. Если после остановки планируется обновление платформы или конфигурации, сделайте резервную копию базы средствами СУБД заранее.
Минимальный порядок действий:
- Предупредите пользователей письмом или сообщением за 15–30 минут.
- Включите блокировку начала сеансов в каждой базе, которую затронет работа.
- Дождитесь, пока пользователи выйдут, оставшиеся сеансы завершите принудительно.
- Остановите службу агента сервера.
- Проверьте, что процессы
ragent,rmngrиrphostисчезли.
СУБД (MS SQL Server или PostgreSQL) — отдельная служба. Для перезапуска сервера 1С её останавливать не нужно. Останавливайте СУБД, только если перезагружаете машину целиком или обслуживаете саму СУБД.
Как остановить сервер 1С через консоль администрирования кластера
Оснастка «Администрирование серверов 1С Предприятия» — самый наглядный способ подготовить сервер к остановке. Она подключается к агенту сервера по порту 1540.
Блокировка начала сеансов
- Откройте консоль, раскройте
Центральные серверы 1С:Предприятия → <имя сервера> → Кластеры → <кластер> → Информационные базы. - Правой кнопкой по базе →
Свойства. Введите логин и пароль администратора этой информационной базы. - Установите флажок «Блокировка начала сеансов включена».
- Заполните «Сообщение о блокировке» — пользователи увидят его при попытке входа.
- Задайте «Код разрешения». С ним вы сами сможете зайти в заблокированную базу, добавив к строке запуска параметр
/UC<код>. - При необходимости отметьте «Блокировка регламентных заданий включена», чтобы фоновые задачи не запускались заново.
Время начала и конца блокировки можно задать заранее. Платформа сама начнёт выводить пользователям предупреждения о скором завершении работы.
Завершение оставшихся сеансов
- В той же ветке кластера откройте узел
Сеансы. - Отсортируйте список по базе и пользователю.
- Выделите сеансы и выберите
Удалитьв контекстном меню.
Принудительное удаление сеанса обрывает работу пользователя: всё, что он не записал, пропадёт. Транзакция, которая выполнялась в момент удаления, будет отменена СУБД, поэтому проведённые ранее документы не пострадают.
Если в списке висит сеанс «Фоновое задание» и после удаления он появляется снова — вы не включили блокировку регламентных заданий.
Остановка службы агента сервера в Windows и Linux
Агент сервера (ragent) — родительский процесс. Когда служба останавливается штатно, агент сам гасит менеджер кластера (rmngr) и рабочие процессы (rphost).
Windows: оснастка «Службы»
- Нажмите
Win+R, введитеservices.msc. - Найдите «Агент сервера 1С:Предприятия 8.3 (x86-64)». Для 32-битного сервера — без суффикса x86-64.
- Правой кнопкой →
Остановить.
Если на машине стоит несколько версий платформы, служб может быть несколько. Откройте свойства службы и посмотрите путь к 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 минут и дольше. Чаще всего рабочий процесс ждёт окончания долгой серверной операции или зависшего запроса к СУБД.
Принудительное завершение процессов обрывает все сеансы без предупреждения. Делайте это только после того, как пользователи вышли или вы согласовали обрыв работы.
Через Диспетчер задач
- Откройте
Ctrl+Shift+Esc→ вкладка «Подробности». - Отсортируйте по имени, найдите
rphost.exe,rmngr.exe,ragent.exe. - Завершайте в порядке: сначала все
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
- Сохраните скрипт из следующего раздела как
C:\Scripts\1c_restart.bat. - Создайте задание командой от имени администратора:
schtasks /Create /TN "1C restart" /TR "C:\Scripts\1c_restart.bat" /SC DAILY /ST 03:00 /RU SYSTEM /RL HIGHEST
- Проверьте задание разовым запуском:
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?
taskkill /F /IM rphost.exe.