Перейти к содержимому

После переезда часть сайта молчит - разбор причин

Сайт после переезда открывается, страницы отдаются, ошибок на экране нет. Молчат подсистемы: не уходят письма, стоят агенты, встал обмен с 1С. Разбираем причины по убыванию частоты, начиная с расписания на новом сервере.

С чего начать

Смотрим, разбиралась ли хоть одна фоновая очередь:

global $DB;
// строки очереди писем с признаком неудачи копятся, когда отправка встала
$rs = $DB->Query("SELECT SUCCESS_EXEC, COUNT(*) AS CNT FROM b_event GROUP BY SUCCESS_EXEC");
while ($row = $rs->Fetch()) { print_r($row); }
// перевод агентов на расписание включается парой опций и переезжает вместе с базой
echo COption::GetOptionString('main', 'agents_use_crontab'), ' ',
COption::GetOptionString('main', 'check_agents'), PHP_EOL;

Этот ответ делит причины пополам и экономит половину разбора. Копящиеся письма с признаком неудачи при значении N у обеих опций указывают на расписание нового сервера. Молчание одного канала при живой очереди писем переводит разбор на внешнюю сторону.

Проверяем расписание и локальную отправку почты:

Окно терминала
crontab -l -u bitrix | grep cron_events # задание переезжает вместе с сайтом не всегда
php -r 'echo ini_get("sendmail_path"), PHP_EOL;' # пустое значение оставляет почту сайта немой
systemctl status postfix --no-pager | head -3 # служба доставки на новом сервере
echo probe | sendmail -v admin@example.org # отправка мимо сайта, для сравнения

Отправка из консоли ничего не доказывает про сайт: язык шлёт письма своим путём. Расхождение между рабочей консолью и молчащим сайтом почти всегда лежит в настройках языка.

Сверяем владельца и права каталога загрузок:

Окно терминала
stat -c '%U:%G %a' /home/bitrix/www/upload /home/bitrix/www/upload/1c_catalog
chown -R bitrix:bitrix /home/bitrix/www/upload # владелец - пользователь веб-сервера
find /home/bitrix/www/upload -type d ! -perm 0755 | head
# права по умолчанию у продукта: файлы 0644, каталоги 0755

Копирование от имени администратора оставляет чужого владельца на всём дереве загрузок. Обмен с 1С падает тогда на записи файла выгрузки, а миниатюры перестают создаваться.

Задаём права на файлы, которые создаёт платформа:

// /bitrix/php_interface/dbconn.php - конфигурация старого ядра
define("BX_FILE_PERMISSIONS", 0644); // права новых файлов
define("BX_DIR_PERMISSIONS", 0755); // права новых каталогов
umask(~BX_DIR_PERMISSIONS); // маска процесса под те же права

Константы действуют на загрузки, кэш и файлы выгрузки обмена. Без них новый сервер раздаёт права по своей маске, и веб-сервер теряет запись.

Возвращаем заголовок авторизации при работе PHP через CGI:

# .htaccess в корне сайта
RewriteEngine on
RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization},L]

Точка обмена живёт по адресу /bitrix/admin/1c_exchange.php и требует пользователя с правом на обмен. В режиме CGI заголовок теряется, авторизация не проходит, и обмен молча не идёт.

Причины

  1. Расписание не переехало на новый сервер примерно 28% случаев

    ПризнакСтоят сразу все фоновые механизмы: агенты, очередь писем, чистка статистики.

    ПроверкаСмотрим задания пользователя сайта и время последнего запуска агентов в базе.

    Что делатьЗаводим задание на скрипт обработчика раз в минуту и сверяем путь к интерпретатору.

  2. Локальная отправка почты на новом сервере не настроена примерно 22% случаев

    ПризнакИз консоли письмо уходит, а сайт копит очередь и жалуется на ошибки отправки.

    ПроверкаЧитаем путь к почтовой программе в настройках языка и состояние службы доставки.

    Что делатьНастраиваем локальную отправку или внешний SMTP, затем разбираем накопившуюся очередь писем.

  3. Владелец и права на загрузки сбились при копировании примерно 18% случаев

    ПризнакОбмен с 1С падает на записи файла выгрузки, а миниатюры картинок не создаются.

    ПроверкаСверяем владельца дерева загрузок с пользователем веб-сервера и права на каталоги.

    Что делатьВозвращаем владельца всему дереву и задаём константы прав в конфигурации старого ядра.

  4. Точка обмена с 1С не пропускает авторизацию примерно 14% случаев

    ПризнакПроверка соединения из 1С не проходит, хотя страница обмена в браузере открывается.

    ПроверкаСмотрим режим работы PHP и наличие правила проброса заголовка авторизации.

    Что делатьДобавляем правило проброса в файл веб-сервера и проверяем право пользователя на обмен.

  5. Система обновлений смотрит на прежний адрес сервера примерно 10% случаев

    ПризнакПродукт пишет об истёкшем сроке пробной версии, хотя лицензия куплена и введена.

    ПроверкаОткрываем раздел системы обновлений в настройках главного модуля и читаем адрес.

    Что делатьВозвращаем штатный адрес сервера обновлений и повторяем проверку лицензионного ключа.

  6. Внешние уведомления не доходят до нового сервера примерно 8% случаев

    ПризнакПлатёжная система показывает успешную оплату, а заказ на сайте остаётся неоплаченным.

    ПроверкаИщем запросы платёжной системы в журнале веб-сервера за время последней оплаты.

    Что делатьОбновляем адрес обработчика в личном кабинете системы и открываем нужные порты наружу.

Частые вопросы

После переезда перестали работать почтовые уведомления, из консоли письмо уходит.

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

Почему после переноса на новый сервер сайт открывается, а половина не работает?

Архив переносит файлы и базу, но не окружение. Расписание, служба доставки почты, права на каталоги и открытые порты настраиваются на новом сервере заново.

После переноса сайта пропали миниатюры к картинкам.

Уменьшенные копии создаются на лету и требуют записи в каталог загрузок. Чужой владелец после копирования от администратора отнимает у веб-сервера это право.

Перестал работать обмен товарами с 1С, ошибка записи в файл import.xml.

Каталог обмена внутри загрузок недоступен веб-серверу на запись. Возвращают владельца дереву загрузок и задают константы прав в конфигурации старого ядра.

Система обновлений не видит лицензию после переезда на новый сервер.

В настройках главного модуля остаётся прежний адрес сервера обновлений. Возвращают штатный адрес, после чего ключ проверяется обычным порядком.

Смежное

Первоисточник