Как всем известно, в 2011 году указом президента РФ был отменен переход на зимнее время. Тем не менее, 30 октября на многих компьютерах часы были переведены. Мы не будем выяснять почему нужные апдейты не были вовремя скачаны установлены (нерадивость админов или невозможность этой операции). Главное сейчас привести часы в актуальное состояние. Конкретно речь пойдет об ОС FreeBSD. Кого не минула чаша сия — прошу под кат.
Итак, имеем сервер под управлением FreeBSD, в моем случае версии 7.0. Перво-наперво командой date проверяем текущее время. Если время правильное, можно смело закрыть этот пост и дальше не читать, в противном случае — проблема «на лицо». Для решения инцидента нам нужно обновить часовые пояса и выбрать из них нужный нам.
Для начала обновим порты, есть несколько способов, какой выбрать решать вам. У меня успешно работает cvsup (однажды добавленный в cron, позволяет иметь всегда актуальную версию портов). Далее идем в /usr/ports/misc/zoneinfo и там выполняем привычные нам make install clean && rehash. Все, теперь у нас есть актуальный список временных зон. Осталось только выбрать правильный часовой пояс и дело в шляпе. Стартуем утилиту tzsetup, и выбираем в списке наш часовой пояс. В моем случае (сервер находится в Новосибирске) это Asia — Russian Federation — Moscow+3 Адепты консоли, конечно, могут это сделать и вручную
После этого я все же рекомендовал бы перезагрузку сервера целиком, как стало известно из поста 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 произошла такая ошибка:
то нужно сделать следующее:
а потом снова повторить
Скажем спасибо ув. Nastradamus за решение, от меня лучи добра в карму :)
Итак, имеем сервер под управлением 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 за решение, от меня лучи добра в карму :)