Ошибка время отличается на 21600 секунд

Когда требуется выполнить синхронизацию с внешним источником данных (например, с 1С), то 1С Битрикс может выдать следующую ошибку: «Время на сервере базы данных отличается от времени на веб-сервере больше, чем на 10 минут». Это означает, что необходимо проверить и настроить правильные временные зоны.

Разберем эту проблему детальнее. Можно выполнить простой фикс (грабли) в виде хука в файле /bitrix/php_interface/after_connect_d7.php
указать принудительно:

$connection->queryExecute("SET LOCAL time_zone='".date('P')."'");

Но мы рекомендуем разобраться детально в причинах проблемы, для этого подключитесь к серверу по SSH и проверьте командой ‘date’ время в операционной системе (здесь и далее мы работаем в CentOS 7.

В консоли мы сначала забекапим временные файлы:

[root@sx ~]# mv /etc/localtime /etc/localtime-backup

потом делаем линк на нужную нам часовую зону:

[root@sx ~]# ln -s /usr/share/zoneinfo/Europe/Moscow /etc/localtime

И далее проверяем командой ‘date’ корректность нового времени.
Вот как это выглядит в терминале:

[root@sx ~]# mv /etc/localtime /etc/localtime-backup
[root@sx ~]# date
Wed Apr  8 17:19:38 UTC 2020
[root@sx ~]# ln -s /usr/share/zoneinfo/Europe/Moscow /etc/localtime
[root@sx ~]# date
Wed Apr  8 20:19:46 MSK 2020

Далее подключаемся в MySQL / MariaDB и проверяем тайм-зону командой:

select current_timestamp;

В консоли это выглядит так:

[root@sx ~]# mysql
Welcome to the MariaDB monitor.  Commands end with ; or g.
Your MariaDB connection id is 104506
Server version: 5.5.64-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

MariaDB [(none)]> select current_timestamp;
+---------------------+
| current_timestamp   |
+---------------------+
| 2020-04-08 20:24:41 |
+---------------------+
1 row in set (0.00 sec)

MariaDB [(none)]> 

Если в MySQL / MariaDB неверное время, то выполняем следующее по определению default_time_zone: идем в /etc/my.cnf (CentOS) или /etc/mysql/my.cnf (Ubuntu) и после:

[root@sx ~] sudo /etc/init.d/mysqld restart

Сложные случаи конфликта во времени в SysConfig

Иногда так происходит, что еще одна отсылка ко времени сервера есть в:

/etc/sysconfig/clock

Вы можете поменять тайм-зону через ‘tzselect’, а в SysConfig, например, может быть прописано: ZONE=America/New_York

Это решается достаточно просто:

[root@sx ~]# vim /etc/sysconfig/clock
ZONE="Europe/Moscow"
UTC=true
ARC=false

Временные зоны в PHP

Сейчас переходим к PHP, здесь тоже может быть нюанс, поэтому смотрим: /etc/php.ini
(из него билдится уже /etc/php.d/bitrixenv.ini) в ini-файле корректируем или добавляем:

timezone =  Europe/Moscow

После изменений в php.ini нужно рестартнуть Апач:

service httpd restart

Просмотров: 16556

Достаточно часто, при проверке параметров системы, в Битрикс, можно увидеть одну из ошибок: Время на БД и на сервере- Время отличается на 3600 секунд (цифра может быть разная, но чаще всего именно эта). Ошибка возникает, как правило, при установке веб окружения битрикс на VPS/VDS. Все из-за неправильных настроек временной зоны. Расскажу как исправить.

Провести тест, можно из административной панели битрикс, находится по пути: Администрирование-> Настройки-> Инструменты-> Проверка системы. 

Так же, данную ошибку можно увидеть в модуле обмена  с сайтом на стороне 1С. При попытке обмена вам может выдать ошибку «Авторизация не пройдена«- даже если уверены, что правильно внесли адрес сайта, логин пользователя с правом обмена и его пароль, а проверка подключения все равно не проходит- скорее всего у вас именно эта ошибка времени на БД и на веб сервере.

Есть два способа решения ошибки

Не очень правильный: Открыть на редактирование файл /bitrix/php_interface/after_connect_d7.php и внести в него строчку.


$connection->queryExecute("SET LOCAL time_zone='".date('P')."'");

После этого, чаще всего, ошибка исчезает и даже 1С проходит проверку авторизации. Но редко, бывает, что не срабатывает для 1С (хотя тест на стороне сайта покажет что все нормально). Есть правильный способ

Подключаемся к серверу по SFTP/FTP протоколу, открываем файл по пути /etc/php.ini (да, именно его, а не /etc/php.d/bitrixenv.ini). И вносим строчку


timezone =  Europe/Moscow

Перезагружаем Apache командой


service httpd restart

Все, после этого и ошибка пропадет и 1С сконнектится с сайтом.

Дополнено: Смена часового пояса на уровне системы в CentOS

Предыдуший способ менят часовой пояс на уровне php. Можно сделать совсем правильно и гарантировано работоспособно: сменить часовой пояс в самой системе CentOS

Открываем терминал и вводим команды

  • mv /etc/localtime /etc/localtime-old — бекапим файл часовых зон
  • ln -s /usr/share/zoneinfo/Europe/Moscow /etc/localtime — делаем ссылку на часовую зону
  • date — убеждаемся что время правильное, выдаст текущую дату и время

PS: Само собой, если у вас 1С и сервер с сайтом работают в другом часовом поясе- выставляйте свой вместо Europe/Moscow

Мои видео на Boosty:

Boosty

Ваш баннер вместо этой рекламы: 15 000 руб/мес. Размещается во всем блоге, форуме, видеоуроках и разделе с макетами.

Ошибка обмена с 1С: «Время на сервере базы данных отличается от времени на веб-сервере больше, чем на 10 минут»

При обмене магазина на 1С-Битрикс с 1С Управление торговлей 11 (УТ 11) можно получить следующую ошибку:

Ответ сервера: failure Время на сервере базы данных отличается от времени на веб-сервере больше, чем на 10 минут. Вероятно неправильно настроены временные зоны. Выполните настройку и повторите обмен.

Это означает, что время PHP на хостинге или виртуальном сервере отличается от времени на компьютере где установлена 1С УТ 11.

Поправить это очень просто, достаточно в файле настроек PHP:
/bitrix/php_interface/dbconn.php

вписать строку:
date_default_timezone_set(«Etc/GMT-4»);

(«Etc/GMT-4») — это часовой пояс Москвы, если у вас другой часовой пояс можно просто рассчитать от московского. Например для Новосибирска будет:
date_default_timezone_set(«Etc/GMT-6»);

Вот так легко вы избавитесь от ошибки «Время на сервере базы данных отличается от времени на веб-сервере больше, чем на 10 минут».

Количество показов: 9300

Возврат к списку


Материал из Wiki — Iphoster — the best ever hosting and support. 2005 — 2023

Перейти к:навигация, поиск

Ошибка при проверке:

Время на БД и веб-сервере	Ошибка! Время отличается на 7200 секунд

1) Подкорректировать время на сервере и для php на MSK:
CentOS_-_устанавливаем_временную_зону_date.timezone_для_сервера_и_скриптов

2) Добавить в файл bitrix/php_interface/dbconn.php строку

date_default_timezone_set("Etc/GMT+3");

Добавить в файл bitrix/php_interface/after_connect_d7.php строки

<?
$connection = BitrixMainApplication::getConnection();
$connection->queryExecute("SET NAMES 'cp1251'");
$connection->queryExecute("SET LOCAL time_zone='".date('P')."'");
?>

Добавить в файл bitrix/php_interface/after_connect.php строки

<?
$DB->Query("SET NAMES 'cp1251'");
$DB->Query("SET LOCAL time_zone='".date('P')."'");
?>

несколько удваивая ответ @clemens с образцами …

в соответствии с вашим часовым поясом:

t=# set timezone to 'GMT+6';
SET

что ты делаешь:

t=# with c("ct", last_gps_read) as (values('2018-03-21 23:26:07.263931-06'::timestamptz,'2018-03-21 23:26:00.5273'::timestamp))
select ct
, extract(EPOCH from ct)
, last_gps_read
, extract(EPOCH from ct) - extract(EPOCH from last_gps_read)
from c;
              ct               |    date_part     |      last_gps_read       |    ?column?
-------------------------------+------------------+--------------------------+-----------------
 2018-03-21 23:26:07.263931-06 | 1521696367.26393 | 2018-03-21 23:26:00.5273 | 21606.736631155
(1 row)

что ты должен делать:

t=# with c("ct", last_gps_read) as (values('2018-03-21 23:26:07.263931-06'::timestamptz,'2018-03-21 23:26:00.5273'::timestamp))
select ct
, extract(EPOCH from ct)
, last_gps_read
, extract(EPOCH from ct - last_gps_read)
from c;
              ct               |    date_part     |      last_gps_read       | date_part
-------------------------------+------------------+--------------------------+-----------
 2018-03-21 23:26:07.263931-06 | 1521696367.26393 | 2018-03-21 23:26:00.5273 |  6.736631
(1 row)

почему: вы отделяете double precision от double precision и получаете epoch aware of time zoneepoch not aware of timezone. Так что ваш результат ожидаем. И задокументированный. Я предлагаю использовать interval для разделения по временным меткам, независимо от того, известен часовой пояс или нет (так как интервал работает в обоих случаях), а ЗАТЕМ извлекать эпоху из interval. Таким образом, вам не нужно настраивать часовой пояс или унифицировать метку времени с часовым поясом для AT TIME ZONE 'GTM' или чего-то еще …

  • Ошибка вулкан 1 dll
  • Ошибка время ожидания истекло linux
  • Ошибка второго цилиндра приора
  • Ошибка время обработки запроса rockstar games launcher истекло
  • Ошибка второго цилиндра пежо 308