MyTetra Share
Делитесь знаниями!
Как временно установить дату и время в Debian Linux 9 и вернуть обратно
Время создания: 02.04.2020 20:51
Автор: xintrea
Текстовые метки: linux, время, установка, настройка
Раздел: Компьютер - Linux - Bash - Установка времени в Linux
Запись: xintrea/mytetra_syncro/master/base/15858498768oelheutky/text.html на raw.github.com

С некоторых пор, в ОС Linux традиционно, по-дефолту, устанавливается и активизируется служба сетевой синхронизации времени. Поэтому все старые рецепты по временному изменению даты и времени не работают. Пользователь пытается установить системное время (sys), пытается настроить аппаратные часы (hardware clock, hc), пытается засинхронизировать их всеми возможными способами, но у него ничего не получается. В этой заметке описывается, как на время установить нужную системную дату и время, а потом вернуть часы обратно.


* * *


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


Просмотр настроек времени:



# timedatectl status

     Local time: Пт 2020-04-03 00:14:14 MSK

 Universal time: Чт 2020-04-02 21:14:14 UTC

       RTC time: Чт 2020-04-02 17:37:21

      Time zone: Europe/Moscow (MSK, +0300)

Network time on: yes

NTP synchronized: yes

RTC in local TZ: no



Здесь видно, что и получение времени по сети включено (Network time on), и синхронизация по NTP (NTP synchronized) тоже включена.


Далее нужно понять, как заблокировать синхронизацию по NTP. Справка показывает следующее:



# timedatectl help

timedatectl [OPTIONS...] COMMAND ...

Query or change system time and date settings.

 -h --help                Show this help message

    --version             Show package version

    --no-pager            Do not pipe output into a pager

    --no-ask-password     Do not prompt for password

 -H --host=[USER@]HOST    Operate on remote host

 -M --machine=CONTAINER   Operate on local container

    --adjust-system-clock Adjust system clock when changing local RTC mode

Commands:

 status                   Show current time settings

 set-time TIME            Set system time

 set-timezone ZONE        Set system time zone

 list-timezones           Show known time zones

 set-local-rtc BOOL       Control whether RTC is in local time

 set-ntp BOOL             Enable or disable network time synchronization



Последняя опция управляет синхронизацией по NTP. Таким образом, отключить синхронизацию можно так:



# timedatectl set-ntp false


# timedatectl status        

     Local time: Пт 2020-04-03 00:15:16 MSK

 Universal time: Чт 2020-04-02 21:15:16 UTC

       RTC time: Чт 2020-04-02 17:38:23

      Time zone: Europe/Moscow (MSK, +0300)

Network time on: no

NTP synchronized: yes

RTC in local TZ: no



Хм, похоже, что программисты что-то напутали, и синхронизация не отключилась. Зато отключилось "сетевое время" Network time on. Поэкспериментировав, можно прийти к выводу (возможно, неправильному), что в этом месте творится какая-то дичь. В любом случае, несмотря на то, что в статусе написано NTP synchronized: yes , синхронизация на самом деле отключена, и поэтому можно устанавливать новое время. И оно будет нормально применено.


Дату и время можно установить следующей командой:



# timedatectl set-time "2020-04-02 20:35:00"



Проверка установленного времени:



# date

Чт апр  2 20:35:05 MSK 2020



Все, новая дата/время установились, и можно поработать в системе с этим новым временем.



Чтобы вернуть время как было, надо дать команду:



# timedatectl set-ntp true



Если после этой команды сразу, в течении нескольких секунд, посмотреть настройки времени, то можно увидеть странное:



# timedatectl status

     Local time: Пт 2020-04-03 00:54:23 MSK

 Universal time: Чт 2020-04-02 21:54:23 UTC

       RTC time: Чт 2020-04-02 18:11:14

      Time zone: Europe/Moscow (MSK, +0300)

Network time on: yes

NTP synchronized: no

RTC in local TZ: no



Вот так сюрприз, теперь все наоборот: "сетевое время" включено, а синхронизация по NTP отключена. Что такое? Ведь команда была на включение NTP-синхронизации! Похоже, что проблема в том, что настройка применяется не сразу. Если подождать пол-минуты, то настройки времени придут в норму, и время снова будет выставленно точно, по сети.



# timedatectl status

     Local time: Пт 2020-04-03 00:56:23 MSK

 Universal time: Чт 2020-04-02 21:56:23 UTC

       RTC time: Чт 2020-04-02 21:56:23

      Time zone: Europe/Moscow (MSK, +0300)

Network time on: yes

NTP synchronized: yes

RTC in local TZ: no



* * *



И напоследок: в современных Линуксах остались команды:


  • date с опцией --set
  • hwclock с опциями --systohc и --hctosys


... но они не работают так, как описано во многих устаревших статьях в Интернете. При включенной службе синхронизации времени по сети (NTP), эти команды будут молча срабатывать, но их действие будет сразу же нивелировано службой синхронизации времени. К сожалению, об этой особенности в старых статьях не рассказывается.



 
MyTetra Share v.0.59
Яндекс индекс цитирования