インターネットを使用してLinuxでシステムのデフォルトのタイムゾーンを自動的に設定するにはどうすればよいですか?私が見るように、NTPサーバーは時間のみを更新できますが、タイムゾーンは更新できません。タイムゾーンを変更できるサーバーはありますか?
インターネットを使用してLinuxでシステムのデフォルトのタイムゾーンを自動的に設定するにはどうすればよいですか?私が見るように、NTPサーバーは時間のみを更新できますが、タイムゾーンは更新できません。タイムゾーンを変更できるサーバーはありますか?
回答:
これを行うプログラムを少し前に作成しました:tzupdate。
次のコマンドを実行すると、タイムゾーンが(実際に設定せずに)設定されることを確認できますtzupdate -p
。
$ tzupdate -p
Europe/Malta
tzupdate
rootとして実行することで、実際に設定できます。
$ sudo tzupdate
Europe/Malta
$ date
Thu 12 Sep 05:52:22 CEST 2013
これは以下によって動作します:
/etc/localtime
そのタイムゾーンのzoneinfoファイルを指すようにsymlinkを更新するこれは古いスレッドですが、まだタイムゾーンを自動的に変更しないkubuntu 1710に関連しています。私はtzupdateにChris Downのソリューションを使用していますが、システムがネットワーク(wifiまたはその他)に接続しようとしたときにトリガーされるようにします。これは、Network Managerを使用していることを前提としています。
最初にターミナルを開きます。
tzupdateをインストールする
sudo apt install python-pip
pip install -U tzupdate
次に、すべてのユーザーがアクセスできることを確認します
sudo cp -R ~/.local/lib/python2.7/site-packages/. /usr/lib/python2.7/.
sudo cp /home/marta_riba/.local/bin/tzupdate /usr/local/bin/tzupdate
動作することをテストする
sudo tzupdate
次に、すべてのユーザーがアクセスできるようにする必要があります
sudo su -
tzupdate
ルートとしてあなたをドロップし、コマンドがタイムゾーンを変更することを確認します。その後、通常のユーザーとして戻るために終了することを確認します
exit
tzupdateがパスワードなしでsudoで実行できることを確認してください。これは、バックグラウンドでこれを実行するnetworkmanagerからこれをトリガーする後のステップで必要です。これを端末に入力して、sudoersファイルを編集します。
sudo visudo
この行をファイルの最後に追加します
ALL ALL=(root) NOPASSWD: /usr/local/bin/tzupdate
CTRL-Xを押してからYを押し、次にENTERを押して変更を保存します
その後、NetworkManagerは、ネットワーク接続の変更をトリガーした後(wifiへの接続時など)に必ずこれを呼び出すようにします。このために、sudo tzupdateを呼び出すだけのdispatcher.dフォルダーにtzupdateというファイルを作成します。ファイルを実行するには実行可能権限が必要です
echo 'sudo tzupdate'| sudo tee /etc/NetworkManager/dispatcher.d/99-tzupdate
sudo chmod +x /etc/NetworkManager/dispatcher.d/99-tzupdate
NetworkManagerがexecute sudo(つまり、sudo tzupdate)を呼び出すことに注意してください。通常、これはパスワードの入力を求めます。
これを行うためのより良い方法があるかもしれません。つまり、NetworkManagerが接続を起動するときにのみこれを呼び出すようにし、(上記のように)接続を停止しないようにします-スクリプトを/ etc / network / if-up .dしかし、これは私のために働いていません
Kubuntuでこれをテストするには-ローカルタイムゾーンを別のものに変更します(タスクバーの日付プラズモイドに移動し、右クリックしてタブから「日付/時刻の調整」、次に「タイムゾーン」を選択します)
Wi-Fiをオフにして再びオンにします。Wi-Fiに接続すると、約30秒待機してからタイムゾーンが正常に変更されるはずです。
これは、Webページでパスワードを入力する必要があるwifiではテストされていないことに注意してください。これがネットワーク接続の最後で実行されるという事実は、ユーザーが資格情報を入力するのに十分な時間を提供する必要があります-さもなければ、これはさらに調整が必要な場合があります(接続が存在することを確認し、インターネットに接続できることを確認し、待つインターネットに接続できず、Y回再試行できない場合はX秒間
「タイムゾーン更新」の意味が明確ではありません。
UnixおよびLinuxは、1970年1月1日00:00 UTCからの秒数として時間を保持します。したがって、Unixシステムクロックはタイムゾーンに依存しません。Linuxカーネルにはタイムゾーンが存在しません。1970年以降の秒数がタイムゾーンを使用して解釈されるのは、ユーザー空間アプリケーションが時間を表示するときだけです。通常、この解釈はCライブラリ関数を介して行われます。タイムゾーンはTZ
環境変数によって選択されます。タイムゾーン定義(タイムゾーン名、UTCからのオフセット、夏時間が有効な日付、およびDST中のオフセットで構成されます)はGNU libcの一部であり、通常「tzdata」パッケージとしてLinuxディストリビューションに含まれています。そのため、タイムゾーンの定義を更新することは実行しているの問題でありapt-get upgrade
、yum update
またはいくつかの同様の操作。
Javaなどの一部のソフトウェアには独自のタイムゾーン定義ファイルがあり、個別に更新する必要があります。
NTPは、1900年1月1日UTCからの秒数を追跡します。したがって、NTPは、Unixカーネルと同様に、タイムゾーンの概念を持ちません。