- Как изменить часовой пояс Linux
- Как работает время в Linux?
- Настройка часового пояса в linux
- 1. Ссылка /etc/localtime
- 2. Настройка с помощью tzdata
- 3. Настройка с помощью systemd
- 4. Настройка часового пояса в GUI
- Выводы
- Изменение часовых поясов и перевод времени на Ubuntu Server 14.04 LTS
- TimeZoneChanges
- Check Configured Timezone
- Check If Needed
- Get Timezone File
- Pretest Change
- Commit Change
- Verification Test 1: Dump Timezone Rules
- Verification Test 2: Translate a UTC Time
- Verification Test 3: Observe Rollover
- Test Failure Scenarios
- Restarting Daemons and Long-Running Programs
- Binary Portability
- References
Как изменить часовой пояс Linux
Мы очень часто пользуемся временем в Linux, начиная от простой задачи узнать сколько сейчас времени, до более сложной — посмотреть логи или узнать когда произошло то или иное событие в системе. Все завязано на времени, поэтому очень важно, чтобы часы шли правильно.
Наша планета разделена на часовые пояса, это было сделано с одной простой целью, чтобы время в любой точке планеты соответствовало солнечному времени. Время между этими зонами отличается на час и всего таких поясов — 24, за эталон взято время по нулевому, Гринвичскому меридиану.
Поэтому в определенный момент время в разных участках планеты будет отличаться на час. В этой небольшой статье мы рассмотрим как изменить часовой пояс Linux, чтобы операционная система правильно работала со временем и могла правильно его синхронизировать через интернет.
Как работает время в Linux?
Операционная система Linux хранит и обрабатывает системное время в специальном Unix формате — количество секунд прошедших с полуночи первого января 1970 года. Эта дата считается началом эпохи Unix. И используется не ваше локальное время, а время по гринвичскому меридиану.
Для преобразования времени по Гринвичу в региональное время используется часовой пояс. Это преобразование выполняется для каждого пользователя. Это необходимо, чтобы каждый пользователь мог настроить для себя правильное по его временной зоне время. Такое поведение просто необходимо на серверах, когда на одной машине могут работать люди из разных частей мира.
По умолчанию в системе может быть установлен неправильный часовой пояс, это приведет к путанице в логах событий, да и другим трудностям. Но все это легко исправить. Дальше мы рассмотрим несколько способов изменить часовой пояс Linux.
Настройка часового пояса в linux
1. Ссылка /etc/localtime
Наиболее популярный и поддерживаемый в большинстве дистрибутивов способ установки часового пояса для всех пользователей — с помощью символической ссылки /etc/localtime на файл нужного часового пояса. Список доступных часовых поясов можно посмотреть командой:
Сначала создайте резервную копию текущего часового пояса:
cp /etc/localtime /etc/localtime.bak
Для создания символической ссылки используйте команду ln -sf. Файл зоны нужно выбрать из доступных в системе. Например, мой часовой пояс — Украина, Киев, для установки будет использоваться следующая команда:
ln -sf /usr/share/zoneinfo/Europe/Kiev /etc/locatime
Теперь можете проверить текущее системное время с помощью утилиты date:
Если у вас установлена утилита rdate можно синхронизировать время с сетью:
sudo rdate -s time-a.nist.gov
Осталось только синхронизировать ваши аппаратные часы с новыми настройками, для этого выполните команду:
Если нужно изменить часовой пояс только для определенной программы или скрипта, просто измените для нее переменную окружения TZ, например:
Эта настройка сохраняется только для текущего сеанса командной оболочки. Чтобы сменить часовой пояс linux для определенного пользователя тоже нужно использовать переменную среды TZ. Только ее нужно добавить в файл
/.environment. Этот файл читается по умолчанию при входе в систему, а значит переменная будет доступна всем программам:
Готово, теперь вы знаете как выполняется настройка часового пояса linux для определенного пользователя.
2. Настройка с помощью tzdata
Если вы не хотите использовать описанный выше способ, можно воспользоваться специальными утилитами. Вот только в разных дистрибутивах используются свои утилиты. Рассмотрим варианты для самых популярных дистрибутивов.
В Red Hat Linux:
В CentOS и Fedora:
В Slackware или FreeBSD:
В большинстве случаев вы увидите подобное диалоговое окно:
Здесь просто нужно выбрать нужный часовой пояс и нажать кнопку Enter. После этого для окончательного применения настроек нужно будет перезагрузить систему.
3. Настройка с помощью systemd
В systemd есть своя утилита для настройки даты и часового пояса. Чтобы узнать текущее состояние выполните:
Для просмотра всех доступных временных зон выполните такую команду:
А для установки нужного часового пояса используйте команду set-timezone, например, тот же Europe/Kiev:
sudo timedatectl set-timezone Europe/Kiev
4. Настройка часового пояса в GUI
В дистрибутиве Ubuntu и других, использующих Gnome, настройка часового пояса Linux может быть выполнена прямо в параметрах системы. Для этого выберите пункт Сведения о системе, затем Дата и время, выберите свое местоположение на карте, или наберите название для поиска в поле ввода:
В KDE аналогично можно установить часовой пояс в настройках системы. Запустите утилиту настроек, откройте пункт Локализация, перейдите в раздел Дата и время, а затем откройте вкладку Часовой пояс:
Остается выбрать часовой пояс в списке и нажать кнопку Применить. Здесь уже изменения должны проявиться моментально.
Выводы
Теперь вы знаете как выполняется установка часового пояса в linux и сможете настроить не только свой домашний компьютер но и сервер с множеством пользователей, которым нужен отдельный часовой пояс для правильного местного времени. Если у вас остались вопросы, спрашивайте в комментариях!
На завершение видео, в котором подробно рассказано, что такое часовые пояса и зачем они нужны:
Источник
Изменение часовых поясов и перевод времени на Ubuntu Server 14.04 LTS
Шумиха вокруг октябрьского изменения часовых поясов и перевода времени почти утихла, но только недавно меня осенило, что я совсем забыл про свои прокси-серверы, работающие на Ubuntu Server 14.04 LTS. С одной стороны это конечно хорошо, так как означает относительную стабильность работы этих систем до той степени, что я умудрился про них забыть. С другой стороны это указывает на допущенный мной недочёт в вопросе предварительного планирования процедур перевода времени. Но, как говориться, лучше поздно, чем никогда. В этой заметке мы рассмотрим пример изменения часового пояса в Ubuntu.
Итак, подключаемся к консоли сервера и обращаем внимание на то, какое сейчас в системе установлено время:
Убеждаемся в том, что время смещено на час вперёд, то есть текущие настройки системы, несмотря на постоянную синхронизацию времени с внутренними NTP-серверами, ничего не знают о произошедшем 26 Октября 2014 г. смещении времени на час назад.
Выяснилось, что в Ubuntu за актуальность данных о часовых поясах отвечает пакет tzdata . Посмотреть версию пакета и наличие его обновления можно следующим образом:
Как видим, для пакета доступна более новая версия. Обновляем версию пакета:
Проверяем наличие изменений в локальной базе часовых поясов и убеждаемся в том, что теперь система знает о переводе времени который необходимо выполнить в 2014 году:
Снова проверяем текущее время и убеждаемся в том, что теперь оно отображается корректно:
В случае возникновения необходимости смены часового пояса, используем команду вызова псевдо-интерфейса пакета tzdata :
Источник
- TimeZoneChanges
Sometimes you need to change the timezone files to cope with changes to your local legal environment, such as:
- in Australia when a state government decides to shift the start or end of daylight saving (Victoria’s adjustment for the Melbourne Commonwealth Games and Western Australia’s temporary adoption in late 2006), or
- in the US when the state of Indiana decided in 2006 to start using Daylight Saving Time for the first time in many decades, and at the same time some Indiana counties switched time zones (from Eastern to Central).
Background: Debian includes timezone files in the /usr/share/zoneinfo directory tree, which is provided by the tzdata package for Etch and later. (For Sarge and earlier the files are part of the libc6). These packages may be updated from time to time:
In Etch, new versions of the tzdata package were released periodically when new versions of the upstream data files became available (at least until the release freeze in late 2006).
In Sarge, the libc6 package version 2.3.2.ds1-22sarge3 updated the timezone files to the tzdata2006b upstream release. This libc6 package version was included in the Sarge «r2» update, released on April 19, 2006.
To make a change ahead of the change being made by the Debian project, follow this process:
- check that the system is configured for the correct timezone,
run zdump to make sure the change is needed,
obtain an updated timezone source file, by download or patch,
run zic to make the change,
run zdump again to make sure the change is effective,
More details can be found below, using Sydney Australia as the example. Substitute the timezone name and the file name for your local environment.
Check Configured Timezone
To see or change what timezone your Debian system is configured for,
What does this do? It changes /etc/localtime. Background information follows.
In Debian releases Etch and later, /etc/localtime is a copy of the original data file. Check the contents of /etc/timezone to see the name of the timezone. If the system is configured normally, you should find that the zoneinfo file referenced by this name is identical to /etc/localtime. For example, you can verify this by running:
The tzconfig command updates both /etc/localtime and /etc/timezone.
In releases Sarge and earlier, /etc/localtime is a link to a file. Check where /etc/localtime links to:
- and use the path following the «/usr/share/zoneinfo/» prefix.
Check If Needed
The zdump program dumps the timezone table. Use it to check the dates for the daylight savings change. For example this system has old Australian rules, showing a change from daylight saving on 26th March:
Get Timezone File
Obtain a copy of the australasia or country-specific timezone file from a recent tzdata package, or from the upstream site.
To get the australasia file from the tzdata sources, configure your sources.list with deb-src lines for your current distribution version, fetch the source, unpack it, and then edit the file. For example on a system tracking Lenny (version numbers may vary):
To bypass Debian and get the files from where the Debian project got them from:
You should now have all the timezone files.
If you are using the file from the source package without the change, then change the file adding the new lines. For example these lines are in the corrected file for the early 2006 change in australasia:
Pretest Change
This is an optional step. It tests the source file without changing the system configuration. It can be done as an ordinary user.
This test works by compiling the timezone source file into a directory, then asking the date command to test translating a UTC time into localtime near the expected discontinuity.
Commit Change
The zic program changes the timezone table. Give it the name of the australasia or country-specific source file you changed. For example:
Then reconfigure the tzdata package, which will update /etc/localtime:
Verification Test 1: Dump Timezone Rules
Use the zdump program again to confirm the change. For example this system has the change properly applied, showing a change from daylight saving on 2nd April:
Verification Test 2: Translate a UTC Time
You can use the —date option to the date command see how the system will interpret a particular time. This method does not change the system clock.
Verification Test 3: Observe Rollover
It is possible to change your system’s time so as to demonstrate the fix is good. There are side-effects of changing the time, such as distortion of file dates, or interoperability problems with other systems nearby, so it’s only a good idea on a test system.
To do the test, use the date —utc command to change the time to just before the first discontinuity identified by zdump, then use the date command to show the local time, over the discontinuity. For example:
Test Failure Scenarios
setting the time in UTC format using the —utc flag is helpful, because setting the time to 02:59:50 would be ambiguous and the date command takes it to mean the second 02:59:50 that morning rather than the first, and the rollover isn’t seen to happen.
if you have NTP enabled, changing the system time in the final test does not work so well, turn it off first.
if the rollover or translation test fails, yet zdump looks fine, perhaps your system has an /etc/localtime file that is a copy of the zoneinfo file rather than a symlink to it. Debian GNU/Linux in Sarge and earlier uses a symlink, but some other Linux distributions use a copy of the file.
Restarting Daemons and Long-Running Programs
After the zoneinfo files are updated, you may need to restart daemons and other long-running programs to get them to use the new zone information. Examples of such programs include apache, bind, cron, fetchmail -d, inetd, mailman, sendmail, and sysklogd. A common symptom of this problem is seeing incorrect timestamps mixed in with the correct timestamps in your log files (e.g. /var/log/syslog). Even interactive programs like «mutt» may continue to use the old timezone information until they are restarted.
Binary Portability
The compiled zoneinfo file appears to be platform and architecture independent, so if you have multiple machines to update you should be able to move the file as-is without running zic again. Similarly, you can just pull updated zoneinfo files from a machine running a different Debian release, or even download the latest tzdata package from unstable, extract the zoneinfo files from within the .deb file, and install them into the /usr/share/zoneinfo directory tree.
References
Bug #345479 covers the 2006 timezone changes for Australia
Источник