*nix
31 October 2011

Неправильное время на FreeBSD — это не страшно. UPD: И в PHP не страшно тоже

Как всем известно, в 2011 году указом президента РФ был отменен переход на зимнее время. Тем не менее, 30 октября на многих компьютерах часы были переведены. Мы не будем выяснять почему нужные апдейты не были вовремя скачаны установлены (нерадивость админов или невозможность этой операции). Главное сейчас привести часы в актуальное состояние. Конкретно речь пойдет об ОС FreeBSD. Кого не минула чаша сия — прошу под кат.

Итак, имеем сервер под управлением FreeBSD, в моем случае версии 7.0. Перво-наперво командой date проверяем текущее время. Если время правильное, можно смело закрыть этот пост и дальше не читать, в противном случае — проблема «на лицо». Для решения инцидента нам нужно обновить часовые пояса и выбрать из них нужный нам.

Для начала обновим порты, есть несколько способов, какой выбрать решать вам. У меня успешно работает cvsup (однажды добавленный в cron, позволяет иметь всегда актуальную версию портов). Далее идем в /usr/ports/misc/zoneinfo и там выполняем привычные нам make install clean && rehash. Все, теперь у нас есть актуальный список временных зон. Осталось только выбрать правильный часовой пояс и дело в шляпе. Стартуем утилиту tzsetup, и выбираем в списке наш часовой пояс. В моем случае (сервер находится в Новосибирске) это Asia — Russian Federation — Moscow+3 Адепты консоли, конечно, могут это сделать и вручную

# cp /usr/share/zoneinfo/vash_chasovoy_poyas /etc/localtime

После этого я все же рекомендовал бы перезагрузку сервера целиком, как стало известно из поста dave42 и комментариев к нему, cron и mysql до рестарта продолжат работу с неверным временем, возможно другие демоны поведут себя тоже не лучшим образом. Ну и если возможности ребутить сервер нет, то хотя бы перезапустить сервисы по отдельности. Надеюсь кому-то помог, спасибо за внимание.

UPD
Ниже, в комментах, Nastradamus сообщает, что вскрылся еще один факт неверной работы сервисов, а именно PHP (у меня эта штука так же была замечена):

Nastradamus 1 ноября 2011, 14:57
Столкнулся с такой штукой в PHP.
phpinfo():

date
date/time support enabled
«Olson» Timezone Database Version 2010.9
Timezone Database internal
Default timezone Europe/Moscow

PHP модулем к апачу, апач рестартовал.

Вот думаю как решить проблему — php показывает время на час раньше.
Наверное, надо пересобрать php.

Nastradamus 1 ноября 2011, 15:08 # ↑
Блин, пересборка порта не помогла.
Призываю всех подумать. Проблема серьезная!
Речь о FreeBSD и PHP 5.2.17_3

Nastradamus 1 ноября 2011, 15:21 # ↑
Полная перезагрузка тестового стенда не помогла!

Nastradamus 1 ноября 2011, 15:27 # ↑
Починилось так:
1) pecl install timezonedb
2) добавляем в файл /usr/local/etc/php/extensions.ini строку:
extension=timezonedb.so
3) рестартуем Апач


От себя добавлю, если в процессе работы pecl произошла такая ошибка:
# pecl install timezonedb
pecl.php.net is using a unsupported protocal - This should never happen.
install failed

то нужно сделать следующее:
# cd `pecl config-get php_dir`
(небольшой хинт: из под mc конструкция cd `pecl config-get php_dir`
 не отрабатывает, поэтому либо меняем каталог руками, либо выполняем в голой консоли)
# mv .channels .channels-broken
# pecl update-channels

а потом снова повторить
# pecl install timezonedb

Скажем спасибо ув. Nastradamus за решение, от меня лучи добра в карму :)

+20
20.3k 34
Comments 38