При работе с платформой 1С на операционных системах семейства Linux администраторы часто сталкиваются с проблемой некорректного поведения клиента после динамических обновлений конфигурации. Особенно остро это проявляется в устаревших решениях, таких как Управление торговлей 10.3, работающих в режиме совместимости 8.2.13. Стандартный параметр запуска /clearcache в таких случаях часто оказывается бесполезным, так как он предназначен для очистки кэша XDTO и запросов к веб-сервисам, но не затрагивает локальный кэш метаданных конфигурации.
В этой статье мы разберем, как грамотно организовать очистку кэша на Linux-клиентах, автоматизировать этот процесс и при этом не сбросить пользовательские настройки (позиции окон, историю выбора и настройки отчетов).
Рассмотрим подробнее механизм работы кэша. При выполнении динамического обновления на сервере информационной базы меняются метки версий. В идеальной ситуации клиент должен распознать эти изменения и обновить локальные файлы метаданных. Однако при использовании динамических обновлений в кэше часто «застревают» старые описания форм и структур данных. Это приводит к ошибкам вида «Объект не найден», несоответствию типов или аварийному завершению работы программы.
Основная сложность заключается в том, что в папке кэша 1С перемешаны как временные данные конфигурации (которые и нужно чистить), так и файлы настроек пользователя с расширением .pfl. Если просто удалить всю папку с идентификатором базы, пользователь потеряет свои персональные настройки интерфейса, что крайне неудобно при большом количестве рабочих мест.
Выясним, как можно автоматизировать процесс, очищая только проблемные области кэша. На Linux-клиентах файлы кэша обычно располагаются в директории ~/.1cv8/1C/1cv8/. Внутри находятся папки с уникальными идентификаторами информационных баз (GUID).
Проанализируем предложенный способ решения проблемы с помощью скрипта. Мы можем встроить проверку операционной системы прямо в код 1С и вызывать внешний Bash-скрипт для очистки папки Config.
Пример кода на стороне 1С для вызова скрипта:
Инфо = Новый СистемнаяИнформация();
Если Инфо.ТипПлатформы = ТипПлатформы.Linux_x86 ИЛИ
Инфо.ТипПлатформы = ТипПлатформы.Linux_x86_64 Тогда
// Путь к скрипту на сервере или локальной машине
ЗапуститьПриложение("/bin/bash /mnt/1c/scripts/clear_cache.sh", , Истина);
КонецЕсли;
Теперь разберем содержимое самого Bash-скрипта clear_cache.sh. Его задача — найти папки кэша и удалить из них только содержимое подкаталога Config, не трогая файлы настроек в корне папки базы.
#!/bin/bash
# Скрипт очистки файлов конфигурации в кэше 1С для Linux
# Перебираем папки с GUID-именами в директории кэша
for FILES in $(ls ~/.1cv8/1C/1cv8/ -1UH | grep ........-....-....-....-............)
do
# Очищаем только содержимое папки Config
if [ -d "~/.1cv8/1C/1cv8/$FILES/Config" ]; then
rm -Rf ~/.1cv8/1C/1cv8/$FILES/Config/*
fi
# Рекомендуется также очищать папку dbms для устранения проблем с БД
if [ -d "~/.1cv8/1C/1cv8/$FILES/dbms" ]; then
rm -Rf ~/.1cv8/1C/1cv8/$FILES/dbms/*
fi
done
Посмотрим на технические особенности файловой системы Linux, которые могут помешать очистке:
1cv8) не завершен полностью или завис, команда rm -rf удалит имя файла, но физически данные останутся на диске до закрытия процесса. Перед чисткой обязательно нужно завершать работу всех клиентов. Можно использовать команду killall -9 1cv8.~/.1cv8, но и в ~/.config/1C/1cv8. Проверьте обе директории..pfl. При выполнении очистки вручную или скриптом старайтесь не удалять файлы в корневой папке GUID, так как именно там лежат настройки связи и персональные предпочтения.Проанализируем более радикальный, но эффективный метод — монтирование папки кэша в оперативную память (tmpfs). Это дает два преимущества:
Для этого в файле /etc/fstab можно прописать монтирование директории ~/.1cv8/1C/1cv8/ в tmpfs. Однако помните, что в этом случае пользовательские настройки будут сбрасываться после каждого выключения ПК. Если их нужно сохранять, этот метод потребует дополнительных скриптов синхронизации .pfl файлов при загрузке и выключении системы.
Как отмечают опытные специалисты, лучший способ борьбы с проблемами кэша — это отказ от динамических обновлений в пользу полноценных. Если ваша специфика работы не позволяет обновляться только в нерабочее время, старайтесь хотя бы раз в несколько дней проводить «чистое» обновление с выгоном всех пользователей. Это актуализирует метки в базе данных и минимизирует количество ошибок кэширования на стороне клиента.