Как изменить каталог временных файлов для сервера 1С на Linux (CentOS 7)

Системный администратор 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При работе сервера 1С:Предприятие на операционных системах семейства Linux, в частности CentOS 7, часто возникает необходимость перенести каталог временных файлов с системного раздела на другой диск (например, более быстрый SSD или RAM-диск tmpfs). Это позволяет не только повысить производительность системы при формировании тяжелых отчетов, но и предотвратить переполнение корневого раздела. Однако стандартные методы изменения переменных окружения через .bash_profile или .bashrc для пользователя usr1cv8 часто не приносят результата. Разберем по шагам, почему это происходит и как правильно настроить систему.

Анализируем причину проблемы

Рассмотрим ситуацию: администратор вносит изменения в файл /home/usr1cv8/.bash_profile, добавляя переменные TMPDIR и делает export. При проверке через консоль под этим пользователем команда echo $TMPDIR возвращает верный путь. Однако функции 1С КаталогВременныхФайлов() и ПолучитьИмяВременногоФайла() продолжают упорно возвращать стандартный /tmp. Проанализируем, почему так происходит.

В современных дистрибутивах Linux службы (демоны) управляются системой инициализации systemd. Когда systemd запускает процесс сервера 1С (srv1cv83), она делает это в «чистом» окружении. Она не инициирует полноценную интерактивную оболочку bash, а значит, файлы настроек профиля пользователя просто игнорируются. Для того чтобы 1С увидела нужные нам переменные, их необходимо передать непосредственно в контекст выполнения службы.

Способ 1: Редактирование юнит-файла службы через override

Это самый современный и правильный способ настройки в системах с systemd. Мы не будем менять основной файл службы, который может быть перезаписан при обновлении платформы, а создадим файл переопределения (override).

Выполним следующую команду в терминале от имени суперпользователя:

systemctl edit srv1cv83

В открывшемся текстовом редакторе добавим секцию конфигурации:


[Service]
Environment="TMPDIR=/tmp/.usr1cv83"
Environment="TEMP=/tmp/.usr1cv83"
Environment="TMP=/tmp/.usr1cv83"

После сохранения файла система создаст директорию /etc/systemd/system/srv1cv83.service.d/ с вашими настройками. Теперь нам нужно заставить systemd перечитать конфигурацию и перезапустить сервер 1С:


systemctl daemon-reload
systemctl restart srv1cv83

Способ 2: Использование конфигурационного файла srv1cv83.conf

В платформе 1С предусмотрен специальный файл для установки параметров запуска сервера. В RPM-системах, таких как CentOS, он обычно располагается по пути /etc/sysconfig/srv1cv83 или в каталоге установки платформы /opt/1cv8/x86_64/8.3.XX.XXXX/srv1cv83.conf. Разберем, как внести изменения в него.

Откроем файл для редактирования и найдем секцию установки переменных. Добавим или изменим строку, указав путь к новому каталогу:

TMPDIR=/tmp/.usr1cv83

Важно помнить, что этот файл считывается стартовым скриптом, и переменные, объявленные в нем, будут наследоваться процессом rphost. После внесения изменений также потребуется перезапуск службы 1С.

Подготовка каталога и права доступа

Выясним важный нюанс: если каталог, который мы указали в TMPDIR, не существует или у пользователя usr1cv8 нет на него прав, 1С молча откатится к использованию стандартного /tmp. Проанализируем процесс создания правильной структуры:

  1. Создадим директорию: mkdir -p /tmp/.usr1cv83
  2. Назначим владельца (пользователя, от которого работает сервер 1С): chown usr1cv8:grp1cv8 /tmp/.usr1cv83
  3. Установим права доступа (рекомендуется 700 или 755): chmod 700 /tmp/.usr1cv83

Важный момент: Если вы создаете подпапку внутри /tmp, помните, что после перезагрузки сервера содержимое /tmp часто очищается. Чтобы папка создавалась автоматически при каждом старте системы с нужными правами, воспользуемся механизмом tmpfiles.d. Создадим файл /etc/tmpfiles.d/1c_temp.conf со следующим содержанием:

d /tmp/.usr1cv83 0700 usr1cv8 grp1cv8 -

Проверка результата в 1С:Предприятие

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


&НаСервере
Процедура ПроверитьПутиНаСервере()
    // Выведем имя компьютера для уверенности, что мы на сервере
    Сообщить("Сервер: " + ИмяКомпьютера());
    
    // Проверим основной каталог временных файлов
    ПутьКВременным = КаталогВременныхФайлов();
    Сообщить("Текущий каталог временных файлов: " + ПутьКВременным);
    
    // Попробуем создать временный файл
    ИмяФайла = ПолучитьИмяВременногоФайла(".txt");
    Сообщить("Сгенерированное имя файла: " + ИмяФайла);
КонецПроцедуры

Если настройки применились корректно, вы увидите путь, начинающийся с /tmp/.usr1cv83/. Также можно воспользоваться системным вызовом для окончательной проверки окружения, которое видит сама 1С:


&НаСервере
Процедура ПроверитьОкружениеНаСервере()
    // Выполним команду mktemp через запуск приложения, чтобы увидеть TMPDIR
    ИмяФайлаРезультата = "/tmp/check_env.txt";
    ЗапуститьПриложение("mktemp -u > " + ИмяФайлаРезультата, , Истина);
    
    // Чтение результата можно выполнить через ТекстовыйДокумент
    Текст = Новый ТекстовыйДокумент;
    Текст.Прочитать(ИмяФайлаРезультата);
    Сообщить("Результат mktemp из окружения 1С: " + Текст.ПолучитьТекст());
КонецПроцедуры

Нюанс с PrivateTmp в systemd

Проанализируем еще одну особенность, которая может сбить с толку администратора. В юнит-файлах 1С часто встречается параметр PrivateTmp=true. Если эта опция включена, systemd создает для службы изолированное пространство имен в файловой системе. Это означает, что физически файлы будут лежать в глубоко вложенной папке вида /tmp/systemd-private-XXXX-srv1cv83.service-XXXX/tmp/.

Если ваша задача — просто изолировать файлы, это полезная функция. Но если вы выносите временные файлы на отдельный диск (монтируете его в /mnt/fast_disk), то параметр PrivateTmp может помешать корректному маппингу путей. В таком случае в override-файле (через systemctl edit) можно установить PrivateTmp=false, чтобы 1С работала с реальными путями в файловой системе.

Таким образом, мы рассмотрели все этапы настройки: от понимания работы systemd до программной проверки в коде 1С. Правильное использование systemctl edit и настройка прав доступа гарантируют стабильную работу сервера с кастомными путями временных данных.

← На главную