1С: Сбой создания сокета доменной зоны Unix (/tmp/1C_... / scn...)
Архитектура межпроцессного взаимодействия (IPC) 1С в Linux
Для высокоскоростного обмена данными между процессами кластера (ragent $\leftrightarrow$ rmngr $\leftrightarrow$ rphost) платформа 1С:Предприятие использует механизм Unix Domain Sockets. При запуске служба создает в каталоге /tmp или /var/tmp специальные сокет-файлы с именами вида /tmp/1C_xxxx, /tmp/1C_orchestrator... и именованные пайпы синхронизации. Ошибка «Сбой создания сокета доменной зоны Unix» (Cannot bind UNIX domain socket / Permission denied / Address already in use) возникает при старте службы srv1cv83 или при динамическом спавне нового рабочего процесса rphost.
Бизнес-риски
Служба сервера 1С не запускается вообще (циклический рестарт), клиенты получают ошибку «Ни один рабочий процесс не может обслужить запрос», зависание консоли администрирования кластера.
Причины блокировки сокетов в /tmp
| Причина | Механизм сбоя | Индикатор ошибки |
|---|---|---|
| Остаточные сокеты от ручного запуска | Процессы были запущены от root, файлы в /tmp принадлежат root. | Permission denied (errno: 13) |
Включение PrivateTmp=true в systemd | Изоляция пространства /tmp не дает клиентским процессам увидеть сокеты сервера. | No such file or directory (errno: 2) |
Очистка systemd-tmpfiles-clean | Таймер ОС удалил «неиспользуемые» сокеты живого кластера 1С. | Внезапный разрыв кластера через 24 часа. |
Пошаговое устранение сбоев Unix-сокетов 1С
Сценарий 1: Очистка «осиротевших» сокетов и временных файлов 1С
Если сервер 1С аварийно завершился, старые сокет-файлы остаются заблокированными на диске:
# 1. Полная остановка службы сервера 1С
sudo systemctl stop srv1cv83
# 2. Принудительное завершение зависших процессов ragent, rmngr, rphost
sudo killall -9 ragent rmngr rphost 2>/dev/null
# 3. Удаление всех остаточных сокетов и файлов IPC 1С из каталога /tmp
sudo rm -rf /tmp/1C_* /tmp/1c_* /tmp/.s.PGSQL.* /tmp/core_*
# 4. Проверка прав на сам каталог /tmp (обязан быть sticky-bit 1777):
sudo chmod 1777 /tmp
sudo chown root:root /tmp
# 5. Запуск службы 1С
sudo systemctl start srv1cv83Сценарий 2: Отключение изоляции PrivateTmp в systemd unit
Если служба 1С или веб-сервер Apache/Nginx запущены с параметром PrivateTmp=true, они видят разные виртуальные пространства каталога /tmp:
# Проверьте service unit сервера 1С и веб-сервера (apache2/httpd)
sudo nano /etc/systemd/system/srv1cv83.service
# Убедитесь, что параметр PrivateTmp отключен:
[Service]
PrivateTmp=false
# Примените конфигурацию:
sudo systemctl daemon-reload
sudo systemctl restart srv1cv83Сценарий 3: Настройка исключений для systemd-tmpfiles
Чтобы системный сервис очистки временных файлов не удалял сокеты работающей 1С:
# Создайте правило исключения для tmpfiles.d
sudo bash -c 'cat << EOF > /etc/tmpfiles.d/1c.conf
x /tmp/1C_*
x /tmp/1c_*
EOF'
# Проверка конфигурации:
sudo systemd-tmpfiles --cleanТиповые ошибки администраторов
- Запуск сервера 1С вручную из-под root: Администратор запускает
ragentдля проверки от root, файлы сокетов создаются с правами root:root, после чего служба из-подusr1cv8больше не может стартовать. - Монтирование /tmp с опцией noexec / nosuid: Некоторые стандарты безопасности монтируют
/tmpс флагами, блокирующими создание именованных каналов FIFO и сокетов.
Инженеры ITSTM настроят сценарии корректной очистки IPC-ресурсов, изолируют профили пользователей и обеспечат бесперебойный автостарт службы.
Частые вопросы (FAQ)
Почему 1С создает файлы именно в /tmp, а не в каталоге кластера?
Каталог /tmp является стандартным общесистемным каталогом POSIX для создания легковесных сокетов межпроцессного взаимодействия (IPC) с минимальными задержками файловой системы.
Можно ли перенести сокеты 1С из /tmp в другую директорию?
Да, переопределив переменную окружения TMPDIR=/var/1C/tmp в конфигурационном файле запуска службы /etc/default/srv1cv83 (или systemd drop-in).
Что означает ошибка 'Address already in use' для Unix-сокета?
Файл сокета остался на диске после аварийной остановки сервера 1С. Поскольку сокет не был корректно закрыт функцией unlink(), новый процесс не может занять это имя.
Как посмотреть список всех активных сокетов 1С в системе?
Выполните команду ss -xlp | grep -i 1c или lsof -U | grep -i 1c.