Ручное обновление timezone в Red Hat
В моё ведение попал очередной сервер, на этот раз под управлением Red Hat Linux Server. И как обычно, если операционную систему устанавливал не ты, то обязательно рано или поздно начнут выявляться какие-то недочёты. В моём случае, в прошедший понедельник 28 октября я обнаружил, что системное время «благополучно» было автоматически переведено на час назад… |
Версия Red Hat:
# cat /etc/redhat-release Red Hat Enterprise Linux Server release 5.6 (Tikanga)
На реальные 08:45 по Москве, системное время сервера отставало на час (хорошо, что хоть часовой пояс был верным). А файл /etc/localtime
был создан ещё при установке операционной системы:
# cat /etc/sysconfig/clock ZONE="Europe/Moscow" UTC=false ARC=false # date Mon Oct 28 07:45:45 MSK 2013 # ls -Al /etc | grep localtime -rw-r--r-- 1 root root 2194 Sep 13 2012 localtime
Чтобы побыстрее избавиться от данной неприятности, было решено вручную обновить базу данных временных поясов. Делается это очень просто:
Скачиваем с сайта IANA (The Internet Assigned Numbers Authority) файл, содержащий последние обновления базы данных временных поясов. На момент публикации данной статьи — Time Zone Data v. 2013h (Released 2013-10-25) tzdata2013h.tar.gz (222.1kb). Скачиваем данный файл, расположенный по ссылке: http://www.iana.org/time-zones/repository/releases/tzdata2013h.tar.gz
…
# wget http://www.iana.org/time-zones/repository/releases/tzdata2013h.tar.gz
—2013-10-28 07:52:46— http://www.iana.org/time-zones/repository/releases/tzdata2013h.tar.gz
Resolving www.iana.org… 192.0.32.8
Connecting to www.iana.org|192.0.32.8|:80… connected.
HTTP request sent, awaiting response… 200 OK
Length: 227411 (222K) [application/x-gzip]
Saving to: ‘tzdata2013h.tar.gz’
100%[=================================================================>] 227,411 124KB/s in 1.8s
2013-10-28 07:52:49 (124 KB/s) – ‘tzdata2013h.tar.gz’ saved [227411/227411]
Далее создаем папку с произвольным именем, переносим туда полученный файл и распаковываем его:
# mkdir ./1 # mv ./tzdata2013h.tar.gz ./1 # cd ./1 # tar xzf ./tzdata2013h.tar.gz # ls -Al total 1012 -rw-r--r-- 1 root root 50809 Oct 25 19:02 africa -rw-r--r-- 1 root root 13777 Sep 11 13:21 antarctica -rw-r--r-- 1 root root 115716 Sep 24 23:02 asia -rw-r--r-- 1 root root 71782 Sep 11 13:21 australasia -rw-r--r-- 1 root root 4169 Sep 3 10:33 backward -rw-r--r-- 1 root root 2953 Sep 5 06:07 etcetera -rw-r--r-- 1 root root 128547 Sep 18 21:39 europe -rw-r--r-- 1 root root 393 Jul 19 2012 factory -rw-r--r-- 1 root root 4419 Aug 26 21:13 iso3166.tab -rw-r--r-- 1 root root 2115 Sep 24 19:54 leapseconds -rw-r--r-- 1 root root 2304 Sep 24 19:54 leapseconds.awk -rw-r--r-- 1 root root 9376 Aug 13 10:58 leap-seconds.list -rw-r--r-- 1 root root 21390 Oct 26 02:34 Makefile -rw-r--r-- 1 root root 135616 Sep 11 13:21 northamerica -rw-r--r-- 1 root root 1190 Jul 19 2012 pacificnew -rw-r--r-- 1 root root 2897 Sep 26 17:54 README -rw-r--r-- 1 root root 19306 Jul 19 2012 solar87 -rw-r--r-- 1 root root 19324 Jul 19 2012 solar88 -rw-r--r-- 1 root root 19600 Jul 19 2012 solar89 -rw-r--r-- 1 root root 77095 Oct 17 18:30 southamerica -rw-r--r-- 1 root root 1546 Jul 19 2012 systemv -rw-r--r-- 1 root root 227411 Nov 1 10:23 tzdata2013h.tar.gz -rw-r--r-- 1 root root 680 Jul 19 2012 yearistype.sh -rw-r--r-- 1 root root 20471 Sep 11 04:47 zone.tab
Далее компилируем необходимую нам временную зону и делаем символьную ссылку на нее из /etc/localtime
. В примере использована временная зона для Europe/Moscow
:
# zic europe # ln -sf --suffix=.bak /usr/share/zoneinfo/Europe/Moscow /etc/localtime # ls -Al /etc | grep localtime lrwxrwxrwx 1 root root 33 Oct 28 07:59 localtime -> /usr/share/zoneinfo/Europe/Moscow -rw-r--r-- 1 root root 2194 Sep 13 2012 localtime.bak
Как видите из примера, мы заодно сделали и бекап старой временной зоны (на всякий случай).
Теперь надо синхронизировать локальное время с каким-нибудь ntp сервером. Такой существует в моей локальной сети:
# ntpdate 10.0.100.2 28 Oct 08:01:12 ntpdate[28676]: step time server 10.0.100.2 offset 405.090438 sec # date Mon Oct 28 09:12:30 MSK 2013
В сети интернет существует пул ntp серверов. Можете воспользоваться им:
- ru.pool.ntp.org
- 0.ru.pool.ntp.org
- 1.ru.pool.ntp.org
- 2.ru.pool.ntp.org
- 3.ru.pool.ntp.org
Нам осталось удалить больше ненужную папку и настроить (по необходимости) периодическую (в примере – раз в сутки в 00:01) синхронизацию локального времени с ntp сервером посредством cron:
# cd .. # rm -rf ./1 # vi /etc/crontab ... 01 0 * * * root /usr/sbin/ntpdate 10.0.100.2 ...
Не забудьте напоследок сделать рестарт необходимых вам служб, зависящих от времени. Например:
# /etc/rc.d/init.d/crond restart Stopping crond: [ OK ] Starting crond: [ OK ]
____________
По мотивам этой статьи.