Обновление платформы 1С:Предприятие на серверах под управлением ОС Linux (Debian, Ubuntu, CentOS) часто сопровождается неожиданными сложностями в работе сетевых протоколов. Одной из наиболее запутанных проблем является внезапный отказ работы FTPСоединение именно в серверном контексте, в то время как на файловых базах или в режиме тонкого клиента под Windows всё продолжает функционировать исправно. Проанализируем причины этой ситуации, разберем программные ошибки платформы и выясним, как восстановить работоспособность обмена данными.
Разберем типичную ситуацию: после перехода на релизы веток 8.3.17.xxxx или 8.3.18.xxxx перестает работать синхронизация (например, между БП и ЗУП), использующая FTP. Первым делом проверим, в каком контексте исполняется код. В типовых конфигурациях обмен часто реализован через модуль ТранспортСообщенийОбменаFTP, который полностью выполняется на стороне сервера.
Рассмотрим пример кода, который может быть использован для диагностики подключения:
&НаСервере
Процедура ПроверитьПодключениеНаСервере()
Попытка
Соединение = Новый FTPСоединение("ftp.myserver.ru", 21, "ЛогинFTP", "ПарольFTP");
МассивФайлов = Соединение.НайтиФайлы("/", "*");
Сообщить("Успешно! Найдено файлов: " + МассивФайлов.Количество());
Исключение
Сообщить("Ошибка подключения: " + КраткоеОписаниеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
КонецПроцедуры
Если этот код успешно отрабатывает &НаКлиенте, но выдает ошибку &НаСервере, значит проблема кроется в особенностях работы серверной части платформы 1С под Linux или в настройках окружения пользователя usr1cv8.
Проанализируем самую необычную и при этом часто встречающуюся причину в версиях 8.3.17 и 8.3.18. Выясним интересную деталь: при инициализации объекта FTPСоединение сервер 1С в некоторых сборках некорректно обрабатывает параметры аутентификации. Вместо пароля, который вы передаете в конструктор, платформа подставляет имя системной учетной записи Linux, от которой запущен процесс rphost (обычно это usr1cv8).
Как это проверить:
proftpd или vsftpd).usr1cv8.Решение проблемы: оптимальным решением является обновление платформы до исправленных релизов (например, выше 8.3.18.1483 или переход на ветку 8.3.20+). Если оперативное обновление невозможно, временным «костылем» станет синхронизация пароля FTP-аккаунта с именем пользователя службы 1С.
В ОС Linux работа с сетевыми портами жестко контролируется брандмауэром. По умолчанию 1С может пытаться использовать активный режим FTP, который часто блокируется сетевыми экранами или NAT. В Windows-клиенте настройки Internet Explorer могут принудительно переводить FTP в пассивный режим, но на Linux-сервере это нужно указывать явно.
Модифицируем создание объекта FTPСоединение, добавив параметры пассивного режима:
// Параметры: Сервер, Порт, Пользователь, Пароль, Прокси, ПассивныйРежим
Соединение = Новый FTPСоединение("ftp.myserver.ru", 21, "Логин", "Пароль", , Истина);
Использование значения Истина в шестом параметре конструктора (ПассивныйРежим) позволяет серверу 1С самому инициировать соединение для передачи данных, что решает проблему «зависания» на этапе получения списка файлов или передачи сообщения обмена.
Платформа 1С в среде Linux использует системную библиотеку libcurl. Разберем ситуацию, когда обновление системы или платформы приводит к конфликту версий. В некоторых случаях 1С начинает отдавать приоритет протоколу IPv6, что видно в логах как префикс ::ffff: перед IP-адресом. Если FTP-сервер не настроен на работу с IPv6, соединение будет сброшено.
Для диагностики и решения проанализируем следующие шаги:
usr1cv8: sudo -u usr1cv8 curl -v ftp://login:password@ftp.server.ru.curl выдает ошибку GSS-API, возможно, 1С пытается использовать Kerberos-авторизацию там, где она не нужна.Для серверных баз на Linux настройки сетевых соединений (включая прокси-серверы для FTP) часто считываются из файла inetcfg.xml. Рассмотрим ситуацию, когда система пытается применить настройки прокси по умолчанию, которых фактически нет в Linux-окружении.
Файл должен находиться по пути /opt/1cv8/x86_64/conf/ (путь может отличаться в зависимости от версии и разрядности). Убедимся, что параметры прокси не мешают соединению:
<config xmlns="http://v8.1c.ru/8.2/inetcfg">
<proxy autoConfig="false" />
</config>
Установите корректные права на этот файл, чтобы пользователь usr1cv8 мог его прочитать. Это исключит влияние системных переменных окружения вроде ftp_proxy, которые могут быть установлены в Debian или Ubuntu по умолчанию.
При выполнении команд Получить() или Записать() через FTP, сервер 1С создает временные файлы. Выясним причину возможного отказа: если у пользователя usr1cv8 нет прав на запись в директорию /tmp или если она переполнена, объект FTPСоединение может возвращать неочевидную ошибку, которую программист интерпретирует как проблему связи.
Проанализируем состояние системы командой df -h и проверим права на /tmp. Также стоит убедиться, что в настройках 1С (файл conf.cfg) не переопределен каталог временных файлов на место, недоступное серверному процессу.
Подводя итог, можно сказать, что решение проблем с FTP на Linux-сервере 1С требует комплексного подхода: от проверки специфических багов платформы с подменой паролей до тонкой настройки сетевых протоколов и прав доступа в ОС.