web-dev-qa-db-ja.com

場所に応じてLinuxタイムゾーンを自動的に設定する

Linuxでインターネットを使用してシステムのデフォルトのタイムゾーンを自動的に設定するにはどうすればよいですか?私が見ているように、NTPサーバーはタイムゾーンではなく時間のみを更新できます。タイムゾーンを変更できるサーバーはありますか?

20

私はこれを行うプログラムを少し前に書きました: tzupdate

tzupdate -pを実行すると、タイムゾーンが(実際に設定することなく)何に設定されるかを確認できます。

$ tzupdate -p
Europe/Malta

Rootとしてtzupdateを実行すると、実際に設定できます。

$ Sudo tzupdate
Europe/Malta
$ date
Thu 12 Sep 05:52:22 CEST 2013

これは次の方法で機能します。

  • 現在のIPの地理位置情報
  • その場所のタイムゾーンを取得する
  • そのタイムゾーンのzoneinfoファイルを指すように/etc/localtimeのシンボリックリンクを更新する
37
Chris Down

これは古いスレッドですが、タイムゾーンを自動的に変更しないkubuntu 1710にも関連しています。私はtzupdateにChris Downのソリューションを使用していますが、システムがネットワーク(wifiまたはその他)に接続しようとしたときにトリガーされることも確認しています。これは、Network Managerを使用していることを前提としています。

最初にターミナルを開きます。

  1. 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
    
  2. 機能することをテストする

    Sudo tzupdate
    
  3. 次に、すべてのユーザーがこれにアクセスできるようにする必要があります。

    Sudo su -
    tzupdate
    

    これは、あなたをrootとしてドロップし、コマンドがタイムゾーンを変更することを確認します。その後、通常のユーザーとして戻るために終了することを確認してください

    exit
    
  4. パスワードなしでSudoを使用してtzupdateを実行できることを確認してください。これは、バックグラウンドでこれを実行するnetworkmanagerからこれをトリガーする後のステップで必要です.sudoersファイルを編集するためにターミナルでこれを入力します

    Sudo visudo
    

    この行をファイルの最後に追加します

    ALL ALL=(root) NOPASSWD: /usr/local/bin/tzupdate
    

    CTRL-Xを押してからYを押し、次にENTERを押して変更を保存します

  5. 次に、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しかし、これは私にはうまくいきませんでした

  6. これをKubuntuでテストするには-ローカルタイムゾーンを別のタイムゾーンに変更します(タスクバーの日付プラズモイドに移動し、右クリックして[日付/時刻の調整]を選択してから、タブから[TimeZone]を選択します)。

    Wi-Fiをオフにしてからもう一度オンにします。Wi-Fiに接続すると、30秒ほど待機しているように見え、タイムゾーンが正常に変更されるはずです。

    これは、ウェブページでパスワードを入力する必要があるwifiではテストされていません。うまくいけば、これがネットワーク接続の最後で実行されるという事実は、ユーザーが資格情報を入力するのに十分な時間を提供する必要があります-それ以外の場合、これはさらに微調整が必​​要になる場合があります(接続が存在することを確認し、インターネットに接続できることを確認し、待つインターネットに接続できない場合はX秒間、Y回再試行します

8

「タイムゾーンの更新」の意味が明確ではありません。

UnixおよびLinuxでは、1970年1月1日00:00 UTCからの秒数で時間を保持しています。したがって、Unixシステムクロックはタイムゾーンに依存しません。 Linuxカーネルにはタイムゾーンは存在しません。 1970年からの秒数がタイムゾーンを使用して解釈されるのは、ユーザースペースアプリケーションが時刻を表示するときだけです。通常、この解釈はCライブラリ関数を介して行われます。タイムゾーンは、TZ環境変数によって選択されます。タイムゾーン定義(タイムゾーン名、UTCからのオフセット、夏時間が有効な日付、およびDST中のオフセットで構成される)は、GNU libcの一部であり、通常は「tzdata」パッケージとしてのLinuxディストリビューションです。したがって、タイムゾーン定義を更新するには、apt-get upgradeyum update、または同様の操作。

Javaなどの一部のソフトウェアには独自のタイムゾーン定義ファイルがあり、個別に更新する必要があることに注意してください。

NTPは、1900年1月1日からの秒数を追跡します、UTC 。そのため、UNIXカーネルと同様に、NTPにはタイムゾーンの概念がありません。

0
200_success