Серверный кэш 1С 8.3: где лежит, как безопасно удалить и автоматизировать
Содержание
Чтобы очистить кэш
1С 8.3 на сервере, остановите службу агента сервера 1С, удалите папки snccntx* внутри каталога кластера (srvinfo\reg_1541) и запустите службу снова. Файлы .lst в этом каталоге не трогайте: в них хранится реестр кластера и список баз.
Частое заблуждение — что параметр запуска /ClearCache или удаление папок в %APPDATA%\1C\1cv8 чистят кэш на сервере. Нет, это клиентский кэш на компьютере пользователя. Серверный кэш живёт в каталоге кластера, и добраться до него можно только при остановленной службе.
Когда серверный кэш действительно пора чистить
Сервер 1С хранит на диске контексты сеансов, кэш конфигураций и служебные данные рабочих процессов. Обычно платформа сама следит за этим хозяйством. Но после сбоев и обновлений в каталоге остаются «осиротевшие» данные, и сервер начинает вести себя странно.
Симптомы, при которых очистка оправдана:
- 🔁 после обновления конфигурации пользователи видят старые формы или старое поведение, хотя в Конфигураторе всё обновлено;
- ⚠️ ошибки при входе в базу, которые пропадают после перезапуска службы, но возвращаются;
- 💾 каталог
srvinfoвырос до десятков гигабайт, а баз в кластере немного; - 🐢 базы стали открываться заметно медленнее после аварийного отключения сервера или переполнения диска;
- 🔄 переход на новую версию платформы, после которого остались данные старых рабочих процессов.
Когда чистить не нужно:
- ❌ «для профилактики» каждую ночь. После очистки первый вход в каждую базу будет долгим: сервер заново строит кэш;
- ❌ при ошибке у одного пользователя на одном компьютере. Здесь почти всегда виноват клиентский кэш;
- ❌ при проблемах с блокировками и зависшими сеансами. Их решают завершением сеансов, а не удалением файлов.
Любая очистка серверного кэша требует остановки службы агента. Все сеансы пользователей во всех базах кластера оборвутся, несохранённые данные пропадут. Делайте это в нерабочее время и заранее предупредите людей.
Где хранится кэш 1С 8.3 на сервере
Всё лежит в каталоге данных кластера, который по традиции называют srvinfo. Его расположение задаётся параметром -d при запуске агента ragent, поэтому на конкретном сервере путь может быть любым.
Типичные пути
| ОС | Путь по умолчанию |
|---|---|
| Windows (служба от USR1CV8, свежая установка) | C:\Program Files\1cv8\srvinfo |
| Windows (старые установки) | C:\Users\USR1CV8\AppData\Local\1C\1cv8\srvinfo |
| Linux | /home/usr1cv8/.1cv8/1C/1cv8 |
Как узнать точный путь в Windows
Посмотрите командную строку службы. В PowerShell:
Get-CimInstance Win32_Service |
Where-Object { $_.Name -like '1C*' } |
Select-Object Name, StartName, PathName | Format-List
В поле PathName найдите параметр -d "..." — это и есть каталог кластера. Там же видно имя службы, оно понадобится для скриптов. Обычно это 1C:Enterprise 8.3 Server Agent (x86-64), но при установке нескольких версий в имени может быть номер платформы.
Как узнать путь в Linux
ps -ef | grep [r]agent
В выводе тоже ищите -d. Если параметра нет, используется домашний каталог пользователя usr1cv8.
Что лежит внутри
Внутри каталога кластера есть папка reg_1541 (номер — порт менеджера кластера; при другом порте будет reg_<порт>). Её содержимое:
| Объект | Что это | Удалять? |
|---|---|---|
1CV8Clst.lst | реестр кластера: базы, рабочие серверы, администраторы | Никогда |
другие файлы *.lst | служебные списки кластера | Нет |
папки snccntx<GUID> | контексты сеансов и кэш рабочих процессов | Да, это и есть кэш |
| папки с GUID баз | кэш конфигурации базы, индекс полнотекстового поиска, журнал регистрации | Только точечно (способ 4) |
На уровень выше, в самом srvinfo, лежит srvribrg.lst — список кластеров центрального сервера. Его тоже не удаляют.
Способ 1. Очистка кэша сервера 1С вручную
Самый понятный вариант: несколько щелчков в Проводнике или пара команд в консоли.
Перед началом
- 📌 Сделайте копию файла
1CV8Clst.lstв отдельную папку. Если что-то пойдёт не так, кластер восстанавливается из неё за минуту. - 📌 Убедитесь, что есть свежие резервные копии баз.
- 📌 Посмотрите в консоли администрирования, кто сейчас работает, и завершите сеансы.
Порядок действий в Windows
- Откройте
services.msc, найдите службу «Агент сервера 1С:Предприятия 8.3» (в английском варианте —1C:Enterprise 8.3 Server Agent). - Остановите службу. Подождите 20–30 секунд.
- Откройте Диспетчер задач и проверьте, что процессы
ragent.exe,rmngr.exeиrphost.exeисчезли. Если какой-то завис, завершите его вручную. - Перейдите в каталог кластера, например
C:\Program Files\1cv8\srvinfo\reg_1541. - Выделите все папки, имя которых начинается на
snccntx, и удалите их. - Запустите службу.
- Зайдите в одну из баз и убедитесь, что вход работает. Первый запуск будет дольше обычного.
Порядок действий в Linux
Имя юнита зависит от версии. С платформы 8.3.21 служба регистрируется через systemd с номером версии в имени. Узнайте его:
systemctl list-units --type=service --all | grep -i srv1cv8
Дальше (имя юнита подставьте своё):
sudo systemctl stop srv1cv8-8.3.24.1548@default.service
pgrep -a rphost # должно быть пусто
sudo rm -rf /home/usr1cv8/.1cv8/1C/1cv8/reg_1541/snccntx*
sudo systemctl start srv1cv8-8.3.24.1548@default.service
На старых установках с init-скриптом команды выглядят как sudo service srv1cv83 stop и sudo service srv1cv83 start.
Если в кластере несколько рабочих серверов, у каждого свой каталог кластера. Очищать нужно на всех серверах, где запущены рабочие процессы, иначе проблема останется на части сеансов.
Способ 2. Консоль администрирования кластера: что она может
Прямой кнопки «очистить кэш» в консоли администрирования серверов 1С нет. Удалить файлы можно только при остановленной службе, а консоль работает через эту службу.
Зато консоль решает часть задач, ради которых обычно чистят кэш, без остановки сервера:
- 👤 Завершение сеансов. Узел кластера → «Информационные базы» → нужная база → «Сеансы». Выделите сеансы и удалите их через контекстное меню. Это помогает, когда «застрял» один пользователь или одна база.
- 🔄 Автоматический перезапуск рабочих процессов. В свойствах кластера есть поле «Интервал перезапуска» (в секундах). Значение
86400означает перезапуск раз в сутки. Новый процесс стартует с чистой памятью, старый завершается, когда отработает свои соединения. - 📊 Контроль памяти. В тех же свойствах задаётся допустимый объём памяти рабочих процессов. При превышении процесс перезапускается.
Через утилиту rac можно посмотреть то же самое из командной строки: rac cluster list покажет кластеры и их идентификаторы, rac session list --cluster=<uuid> — сеансы. Параметры остальных команд смотрите в справке rac help.
Если после завершения всех сеансов базы и перезапуска рабочих процессов симптом пропал, удалять файлы не нужно. Это дешевле: остальные базы кластера продолжают работать.
Способ 3. Скрипт очистки кэша: остановка, очистка, запуск, лог
Если чистить кэш
приходится регулярно, например после каждого планового обновления, удобнее один скрипт с журналом. Логика везде одинаковая: остановить службу → дождаться завершения процессов → удалить snccntx* → запустить службу → записать результат.
Скрипт для Windows (bat)
@echo off
setlocal
rem === Настройки: проверьте имя службы и путь ===
set "SRV=1C:Enterprise 8.3 Server Agent (x86-64)"
set "CLST=C:\Program Files\1cv8\srvinfo\reg_1541"
set "LOG=C:\Scripts\clear_1c_cache.log"
echo [%date% %time%] Stop service >> "%LOG%"
net stop "%SRV%" >> "%LOG%" 2>&1
timeout /t 30 /nobreak >nul
rem Если рабочие процессы зависли, завершаем принудительно
taskkill /f /im rphost.exe >> "%LOG%" 2>&1
taskkill /f /im rmngr.exe >> "%LOG%" 2>&1
echo [%date% %time%] Delete snccntx folders >> "%LOG%"
for /d %%D in ("%CLST%\snccntx*") do (
echo %%D >> "%LOG%"
rd /s /q "%%D"
)
echo [%date% %time%] Start service >> "%LOG%"
net start "%SRV%" >> "%LOG%" 2>&1
echo [%date% %time%] Done, errorlevel=%errorlevel% >> "%LOG%"
endlocal
Сообщения в логе латиницей сделаны намеренно: кириллица в bat-файлах легко превращается в «кракозябры» из-за кодировки консоли.
Запускайте скрипт от имени администратора. Для расписания создайте задание в Планировщике заданий Windows с опцией «Выполнять с наивысшими правами» и временем, когда в базах никого нет.
Скрипт для Linux (bash)
#!/bin/bash
UNIT="srv1cv8-8.3.24.1548@default.service" # своё имя юнита
CLST="/home/usr1cv8/.1cv8/1C/1cv8/reg_1541"
LOG="/var/log/clear_1c_cache.log"
log() { echo "[$(date '+%F %T')] $*" >> "$LOG"; }
log "Stop $UNIT"
systemctl stop "$UNIT"
sleep 20
if pgrep -x rphost >/dev/null; then
log "rphost still alive, killing"
pkill -9 -x rphost
fi
log "Delete snccntx folders"
find "$CLST" -maxdepth 1 -type d -name 'snccntx*' -print -exec rm -rf {} + >> "$LOG" 2>&1
log "Start $UNIT"
systemctl start "$UNIT"
systemctl is-active --quiet "$UNIT" && log "Service is active" || log "ERROR: service did not start"
Сохраните как /usr/local/bin/clear_1c_cache.sh, выполните chmod +x и добавьте в cron пользователя root, например на 03:00 в воскресенье: 0 3 * * 0 /usr/local/bin/clear_1c_cache.sh.
Скрипт обрывает все сеансы без предупреждения. Регламентные задания, обмены и фоновые выгрузки, запущенные в это время, тоже прервутся. Сверьте расписание с ними.
Что проверять в логе
- ✅ служба остановилась без ошибки и запустилась снова;
- ✅ в списке удалённых есть только папки
snccntx…; - ✅ последняя строка — «Service is active» или код возврата
0в Windows.
Если служба не стартовала, это видно утром по логу, а не по звонкам пользователей.
Способ 4. Кэш одной информационной базы
Иногда сбоит только одна база, например после неудачного обновления конфигурации. Тогда можно почистить данные именно её, не трогая остальные. Но служба агента всё равно останавливается: файлы заняты рабочими процессами.
- Узнайте идентификатор базы. Через
rac: сначалаrac cluster list, затемrac infobase summary list --cluster=<uuid кластера>. В выводе у каждой базы есть полеinfobaseс GUID и полеname. - Остановите службу агента.
- В каталоге
reg_1541найдите папку с этим GUID. - Внутри удалите служебные папки кэша конфигурации. Папку
1Cv8Log(журнал регистрации) и1Cv8FTxt(индекс полнотекстового поиска) не трогайте, если не хотите потерять журнал и перестраивать индекс. - Запустите службу и войдите в базу.
Если не уверены, какие подпапки внутри — кэш, переименуйте папку базы целиком, например добавьте в конец _old, и запустите службу. Сервер создаст папку заново. Убедитесь, что база работает, затем перенесите из старой папки 1Cv8Log, если журнал регистрации нужен, и только потом удаляйте _old.
Индекс полнотекстового поиска после потери восстанавливается в самой базе. Надёжный путь для любой конфигурации: Главное меню → Все функции → Стандартные → Управление полнотекстовым поиском, кнопка «Обновить индекс». Если пункта «Все функции» нет, включите его в параметрах программы. На крупной базе это занимает от десятков минут до нескольких часов.
А если база файловая
У файловой базы серверного кэша нет. Кэш хранится на каждом компьютере пользователя в %APPDATA%\1C\1cv8 и %LOCALAPPDATA%\1C\1cv8, в папках с GUID. На терминальном сервере это свой набор папок в профиле каждого пользователя. Чистят его закрытием 1С и удалением этих папок или запуском с параметром /ClearCache.
Ошибки при очистке кэша, которые дорого обходятся
Ещё одна ошибка — очищать кэш при запущенной службе «на живую» средствами антивируса или скриптом без остановки. Часть файлов удалится, часть нет, и рабочий процесс получит неполные данные. Итог хуже исходной проблемы.
Как сделать, чтобы кэш реже доставлял проблемы
Разросшийся и сбойный кэш чаще следствие, чем причина. Вот что снижает потребность в очистке:
- 🛡️ Исключения в антивирусе. Добавьте каталог кластера и папку временных файлов пользователя службы в исключения проверки. Антивирус, блокирующий файлы во время записи, — частый источник повреждённых контекстов.
- 💽 Свободное место. Держите на диске с
srvinfoзапас не меньше 10–15 ГБ. Переполнение диска во время работы оставляет недописанные файлы. - ⚡ Быстрый диск. Каталог кластера лучше разместить на SSD. При переносе укажите новый путь в параметре
-dслужбы и скопируйте содержимое целиком, сохранив права. - 🔄 Перезапуск рабочих процессов по интервалу в свойствах кластера вместо еженощной очистки файлов.
- 📜 Технологический журнал под контролем. Если включали его для диагностики, не забудьте выключить или ограничить срок хранения: логи легко занимают больше места, чем сам кэш.
- 🧩 Порядок при смене платформы. После установки новой версии сервера удалите старую службу, проверьте, что работает одна, и только потом почистите
snccntx*.