Как мне навсегда сбросить часовой пояс в Debian?

29

Dreamhost, кажется, думает, что нам нравится PDT, несмотря на то, что мы на Среднем Западе. Как мне изменить часовой пояс?

elynnaie
источник

Ответы:

73

Инструмент, который я нашел более простым в использовании dpkg-reconfigure. Использование:

sudo dpkg-reconfigure tzdata

Вам будет предоставлено множество вариантов, включая те, которые не включены в tzselect.

Ynhockey
источник
Преимущество такого подхода состоит в том, что вы делаете это воспроизводимым образом и ограничиваете вероятность того, что вы сделаете что-то неправильное, например, поместите часовой пояс, который не существует.
Mogget
1
Это хорошая вещь, но если вам нужна неинтерактивная (и поэтому пригодная для сценариев) опция, см. Мой ответ ниже.
mc0e
14

Это, вероятно, немного поздно для OP, и больше предназначено для других искателей, которые приезжают сюда.

Если вам нужно неинтерактивное решение, попробуйте это решение с помощью изменения часового пояса с помощью dpkg-reconfigure tzdata и debconf-set-selections

echo "Europe/Zurich" > /etc/timezone 
dpkg-reconfigure -f noninteractive tzdata

Вы можете выяснить свой часовой пояс, покопавшись в / usr / share / zoneinfo. Фактически вышеприведенная команда dpkg-reconfigure копирует соответствующий файл в / etc / localtime. Раньше я просто делал это вручную, и, кажется, работает нормально.

Не удивляйтесь, если долго запущенные процессы не воспримут изменения. например, всплывают метки времени регистрации Apache. Подумайте, имеет ли это значение, и, следовательно, нужно ли вам перезапустить запущенные процессы или даже перезагрузить компьютер.

mc0e
источник
3
Остерегайтесь, чтобы это работало, это требование, которого /etc/localtimeеще не существует. Если он существует и является мягкой ссылкой /usr/share/zoneinfo/whatever, он берется за основу и /etc/localtimeобновляется соответствующим образом, перезаписывая ваши изменения.
Мультисинхронизация
11

Чтобы редактировать его не в интерактивном режиме в последних версиях Debian и Ubuntu (Stretch / Xenial и т. Д.), Его также необходимо удалить /etc/localtime, в противном случае оно /etc/timezoneбудет перезаписано.

echo 'Europe/Zurich' > /etc/timezone 
rm /etc/localtime
dpkg-reconfigure -f noninteractive tzdata

Этот ответ основан на ответе mc0e. Я не могу добавить комментарий с моей репутацией.

Войта Мысливец
источник
3

TL; DR

echo "TZ=Etc/UTC" >> /etc/environment
tzconfig

где Etc/UTCваш предпочтительный часовой пояс вы нашли с помощью tzselect.

Более длинная версия

Когда вы используете

dpkg-reconfigure tzdata

информация о часовом поясе не сохраняется после перезагрузки. Вы можете проверить свои настройки с

diff -s /etc/localtime /usr/share/zoneinfo/`cat /etc/timezone`

Если вы только обновляете /etc/timezone, обновление не будет соответствовать /etc/localtime, поэтому лучше выполнить

tzconfig

Используйте, tzselectчтобы узнать, какие часовые пояса действительно существуют (или просто просмотрите /usr/share/zoneinfoкаталог).

В системах POSIX TZприоритет должен иметь приоритет перед /etc/localtime:

export TZ='Europe/Berlin'
$ date
Tue Apr 10 08:51:03 CEST 2018
export TZ='Pacific/Efate'
$ date
Tue Apr 10 18:28:33 +11 2018

Прямое использование TZ может сэкономить вам много системных вызовов, поскольку часто используемые функции, связанные с датой и временем, должны обращаться к файловой системе каждый раз, когда какая-либо программа запрашивает текущую дату. Это микрооптимизация, но довольно простая.

Tombart
источник
Вы уверены, что экспорт TZв вашем профиле создает символическую ссылку? Это не звучит правдоподобно на моем опыте. Возможно, вы имели в виду «Также обязательно создайте символическую ссылку ...»?
атп
1
@amn Нет, это не создаст символическую ссылку, я попытался уточнить это. Но $TZпеременная считывается glibcфункциями: gnu.org/software/libc/manual/html_node/TZ-Variable.html
Tombart
не должно ли быть echo "TZ=Etc/UTC" >> /etc/environment? вы упускаете TZ=часть ... (если кто-то все еще использует древние версии Debian). Кроме того, неинтерактивные вещи, такие как демоны, все равно будут использовать /etc/localtimeверсию вместо одного набора в TZ...
Матия Налис
@MatijaNalis Да, ты прав. Спасибо за исправление!
Томбарт