При работе сервера 1С:Предприятие в среде Linux, особенно в высоконагруженных системах, часто возникает необходимость перенести каталог временных файлов со стандартного пути /tmp/ на другой раздел или диск (например, на быстрый SSD или RAM-диск). Это может быть продиктовано требованиями безопасности, ограниченным объемом системного раздела или необходимостью повышения производительности. Однако стандартные инструкции, предлагающие изменять .bash_profile, часто не приносят результата для серверных процессов 1С, так как они запускаются как службы systemd и не инициализируют интерактивную оболочку пользователя.
В этой статье мы подробно разберем, почему стандартные методы не работают, и проанализируем наиболее эффективные способы перенаправления временных файлов для серверного кластера 1С.
Рассмотрим ситуацию, с которой сталкиваются многие администраторы: при выполнении команды sudo su - usr1cv8 и проверке mktemp -u система корректно показывает новый путь. Однако процессы rphost по-прежнему продолжают писать в /tmp/. Выясним причину этого поведения. Файлы типа .bash_profile или .profile обрабатываются только при входе пользователя в систему в интерактивном режиме (login shell). Служба сервера 1С запускается системным менеджером systemd, который создает собственное окружение для процесса, игнорируя настройки оболочки bash. Следовательно, переменные окружения нужно передавать непосредственно в конфигурацию службы.
Разберем наиболее правильный и современный способ настройки. Вместо прямого редактирования файла /lib/systemd/system/srv1cv83.service, который может быть перезаписан при обновлении платформы 1С, мы будем использовать механизм override. Это позволит сохранить наши настройки даже после установки новой версии сервера.
Выполним следующие шаги вместе:
systemctl edit srv1cv83
[Service]
Environment="TMPDIR=/путь/к/новому/каталогу"
Environment="TEMP=/путь/к/новому/каталогу"
Environment="TMP=/путь/к/новому/каталогу"
Проанализируем ситуацию с переменными: мы указываем сразу три переменные — TMPDIR, TEMP и TMP. Это важно, так как разные компоненты платформы 1С и внешние библиотеки (например, для работы с PDF или криптографией) могут запрашивать разные переменные окружения для поиска временной папки.
Просто указать путь в настройках недостаточно. Если у пользователя usr1cv8 не будет прав на запись в целевую директорию, сервер 1С не сможет запуститься или будет работать с ошибками. Рассмотрим, как правильно подготовить новое место хранения.
Предположим, мы решили использовать путь /mnt/1c_data/temp. Проделаем следующие операции:
mkdir -p /mnt/1c_data/temp
chown usr1cv8:grp1cv8 /mnt/1c_data/temp
chmod 1777 /mnt/1c_data/temp
Обратим внимание на команду chmod 1777. Установка sticky bit (единица в начале прав) крайне важна. Она гарантирует, что файлы, созданные одним процессом (например, одним из rphost), не смогут быть удалены другим процессом, не имеющим на то прав, даже если они работают в одной группе. Это стандарт для временных каталогов в Linux.
Если мы работаем в операционной системе Astra Linux Special Edition, нам необходимо учитывать мандатное управление доступом (МРД). Даже если права Linux (rwx) настроены верно, механизмы безопасности могут блокировать запись в новый каталог, если его метка безопасности не совпадает с меткой процесса 1С.
Проверим текущие метки безопасности процесса сервера 1С и нашего нового каталога. Посмотрим на пример использования команд pdp-ls:
pdp-ls -Z /tmp/ # Посмотрим метки стандартного каталога
pdp-ls -Z /mnt/1c_data/temp # Сравним с новым каталогом
Если метки различаются, установим нужный уровень конфиденциальности для нового каталога с помощью команды pdp-set, чтобы процессы 1С имели к нему беспрепятственный доступ.
Временные файлы 1С имеют неприятную особенность накапливаться, особенно при аварийном завершении сеансов. Разберем, как заставить систему автоматически очищать наш новый каталог от старых файлов, аналогично тому, как это происходит с системным /tmp/.
Для этого создадим конфигурационный файл в системе systemd-tmpfiles:
/etc/tmpfiles.d/1c_temp.conf.d /mnt/1c_data/temp 1777 usr1cv8 grp1cv8 5d
Эта запись означает: "Создавать каталог при загрузке (если его нет), устанавливать права 1777, владельца usr1cv8 и автоматически удалять файлы, которые не изменялись более 5 дней". Это обеспечит стабильную работу сервера без риска переполнения диска.
Если сервер обладает достаточным объемом оперативной памяти, мы можем значительно ускорить работу с временными файлами, разместив их в RAM-диске. Проанализируем, как это сделать через /etc/fstab.
Добавим строку в файл /etc/fstab:
tmpfs /mnt/1c_data/temp tmpfs rw,nosuid,nodev,size=4G,mode=1777,uid=usr1cv8,gid=grp1cv8 0 0
После этого выполним монтирование командой mount -a. Теперь все временные операции 1С будут происходить в памяти, что существенно снизит нагрузку на дисковую подсистему при формировании тяжелых отчетов или выполнении регламентных заданий.
После внесения всех изменений нам необходимо перезапустить службы, чтобы systemd применил новую конфигурацию. Выполним последовательно:
systemctl daemon-reload
systemctl restart srv1cv83
Чтобы убедиться, что всё сделано правильно, проанализируем открытые файлы процесса rphost. Воспользуемся командой lsof:
lsof -p $(pgrep rphost | head -n 1) | grep /mnt/1c_data/temp
Если в выводе команды мы увидим дескрипторы файлов в нашем новом каталоге, значит, задача успешно решена. Мы перевели сервер 1С на использование выделенного каталога временных файлов, обеспечив при этом безопасность, производительность и удобство администрирования в среде Astra Linux.