Ntpを使用して時計の更新を強制するにはどうすればよいですか?

私はバッテリーで支えられたRTCを欠いているARMベースの組み込みシステムでUbuntuを実行しています。 目覚めの時間は1970年の間のどこかにあります。 したがって、NTPサービスを使用して時刻を現在の時刻に更新します。

私は次の行を追加しました /etc/rc.local ファイル:

sudo ntpdate -s time.nist.gov

しかし、起動後、時間が更新されるまではまだ数分かかりますが、その間に効果的に作業することはできません tarmake.

どのように私は任意の時点で時計の更新を強制することができますか?


更新1: 以下(EricとStephanのおかげで)はコマンドラインから正常に動作しますが、入れたときに時計を更新することはできません /etc/rc.local:

$ date ; sudo service ntp stop ; sudo ntpdate -s time.nist.gov ; sudo service ntp start ; dateThu Jan  1 00:00:58 UTC 1970 * Stopping NTP server ntpd     [ OK ]  * Starting NTP server          [ OK ] Thu Feb 14 18:52:21 UTC 2013

私は何を間違っていますか?


更新2: 私は第1回の更新に応じて来たいくつかの提案に従ってみましたが、実際には何も必要に応じて仕事をしていないようです。 ここで私が試したものです:

  1. サーバーを次のように置き換えます us.pool.ntp.org
  2. プログラムへの明示的なパスの使用
  3. を削除します。 ntp 完全にサービスし、ちょうど残します sudo ntpdate ...rc.local
  4. を削除します。 sudo 上記のコマンドから rc.local

上記を使用して、マシンはまだ1970年に開始されます。 ただし、一度ログインしたコマンドラインからこれを行うと(経由 ssh)、私が呼び出すとすぐに時計が更新されます ntpdate.

私が最後にしたことは、それを削除することでした rc.local に電話をかけると、 ntpdate 私の中で .bashrc ファイル。 これは期待どおりに時計を更新し、コマンドプロンプトが利用可能になると真の現在時刻を取得します。

しかし、 これは、マシンの電源が入っていて、ユーザーがログインしていない場合、時間が更新されることがないことを意味します。 私は、もちろん、再インストールすることができます ntp サービスだから、少なくとも時計は起動から数分以内に更新されますが、その後、我々は広場1に戻っています。

だから、なぜ配置する理由はありますか ntpdate でコマンド rc.local 必要なタスクは実行されません。 .bashrc 正常に動作しますか?

Ntpdateの代わりに(これは 非推奨)、使用 ntpd:

sudo service ntp stopsudo ntpd -gqsudo service ntp start

その -gq ntpデーモンに、オフセットに関係なく時刻を修正するように指示します(g)とすぐに終了する(q)時間を設定した後。

おそらく ntp サービスが実行されている、それが理由です ntpdate ソケット(ポート123UDP)を開けず、ntpサーバーに接続できません。

コマンドラインから試す:

sudo service ntp stopsudo ntpdate -s time.nist.govsudo service ntp start

これを入れたい場合 /etc/rc.local 次のものを使用します:

( /etc/init.d/ntp stopuntil ping -nq -c3 8.8.8.8; do   echo "Waiting for network..."donentpdate -s time.nist.gov/etc/init.d/ntp start )&

Sntpを使用して時刻をすぐに設定します。 そのmanページからのいくつかの例:

USAGE     sntp ntpserver.somewhere             is the simplest use of this program and can be run as an unprivileged command to check the current time and error in the local clock.     sntp -Ss -M 128 ntpserver.somewhere             With suitable privilege, run as a command or from a cron(8) job, sntp -Ss -M 128 ntpserver.somewhere will request the time from the server, and if that server reports that it is             synchronized then if the offset adjustment is less than 128 milliseconds the correction will be slewed, and if the correction is more than 128 milliseconds the correction  will             be stepped.     sntp -S ntpserver.somewhere             With suitable privilege, run as a command or from a cron(8) job, sntp -S ntpserver.somewhere will set (step) the local clock from a synchronized specified server, like the (dep‐             recated) ntpdate(8), or rdate(8) commands.

これは、任意のntpタイムサーバーで動作しません。 サーバーの便利なリストは、次の場所にありますntppool.org.....

あなたは必要です 須藤 特権、例えば:

sudo sntp -Ss -M 128 0.de.pool.ntp.org

使用 timedatectl (systemdサービスユニット)時間を設定します。 ntp は非推奨です。

sudo systemctl restart systemd-timesyncd.service

ログを読んで更新された時刻を確認することができます journalctl -xe | tail.

との状態 timedatectl status と設定で /etc/systemd/timesyncd.conf.

参考文献

他の人が指摘しているように、最善の解決策は、デフォルトで1000秒であるパニック閾値を無視するようにntpdに指示することです。 パニックしきい値は、次のいずれかの方法で構成できます:

  • 編集 /etc/default/ntp そして、-gオプションが存在することを確認してください。
  • /etc/ntpを編集します。confと場所 tinker panic 0 トップに

これまでのところ、これは本質的に他の人が推奨していることですが、私はあなたが取るべきだと思うもう一つのステップがあります。 Fake-hwclockプログラムをインストールする:

# apt-get install fake-hwclockfake-hwclock: Save/restore system clock on machines without working RTC hardware Some machines don't have a working realtime clock (RTC) unit, or no driver for the hardware that does exist. fake-hwclock is a simple set of scripts to save the kernel's current clock periodically (including at shutdown) and restore it at boot so that the system clock keeps at least close to realtime. This will stop some of the problems that may be caused by a system believing it has travelled in time back to 1970, such as needing to perform filesystem checks at every boot. On top of this, use of NTP is still recommended to deal with the fake clock "drifting" while the hardware is halted or rebooting.

Fake-hwclockがインストールされていると、あなたのマシンは、それがすべての上に再び1970であると考えて起動しません。 あなたのマシンが起動すると、最後の再起動/シャットダウン中にfake-hwclockが書いたタイムスタンプにクロックを設定します。 これは、起動時にネットワークの問題がある場合に備えて、多少正しい時計を持つことができることを意味します。

ntpdateはnet dameonとは異なるプログラムです。 Ntpdはそのソケットで実行されているため、NTPDateはおそらく起動時にエラーが発生しています。

コマンドラインから、次のコマンドを実行します

# sudo service ntp stop ; sudo ntpdate -s time.nist.gov ; sudo service ntp start

また、ntpdをすべて一緒にアンインストールし(apt-get remove ntp)、1時間ごとにntpdateを使用するcronスクリプトを追加することもできます。

更新

ntpサービスはおそらくこのシステムでは意味のある値を持っていないので、最初に削除してください。

# sudo apt-get remove ntp

次に、コマンドを追加します:

ntpdate -sb time.nist.gov

/etc/rclocal

再起動します。 その時点で良いはずです。

rdate -s tick.greyware.com

あなたがしたいすべては、単純な、一度時計を設定している場合

現在のUbuntuベースのシステムの中には、デフォルトでNTPサービスを使用していないものもあることに注意してください。 私のLinux Mint19(Ubuntu18.04)マシンでは、時間は次のように保持されます systemd-timesyncd.

だから、同期が失われた後に最新の時刻を取得するには、私はちょうど実行します

sudo systemctl restart systemd-timesyncd

15.04以降、Ubuntuはデフォルトでsystemdを使用します。 したがって、時間のような重要なシステムはsystemdによって管理されます。 システムが使用しているサービスを見つけるには、次のようなものを実行します

systemctl list-unit-files | grep -E 'ntp|timesyncd'

16.04のTechJSの場合、サービスは次のとおりでした ntp. Ubuntu18.04(Mint19)での自分のためのサービスは次のとおりです systemd-timesyncd. 興味深いことに、私は私が持っている16.04サーバーにログインし、それを使用しています systemd-timesyncd 同様に。

Debian/Mint/Ubuntu(または他のDebian派生物)システムでこれを行う正しい方法は、次の行を持つことです

NTPD_OPTS="-g"

ファイル内の

/etc/default/ntp

これにより、ntpdが/etc/initから起動されることが保証されます。d/ntpスクリプトでは、"-g"オプションで実行されます。

 start-stop-daemon --start --quiet --oknodo --pidfile /var/run/ntpd.pid --startas /usr/sbin/ntpd -- -p /var/run/ntpd.pid -g -u 124:128

ntpdが1000秒以上のシステム時刻を修正できるようにするには、たとえば、ハードウェアRTCがないために起動時にシステム時刻がJanuary1st1970である場合。

tlsdate TLSとリモートサーバーに安全に接続し、安全なハンドシェイクからリモートタイムを抽出することにより、ローカルクロックを設定します。 とは異なりntpdate, tlsdate たとえば、リモートのHTTPSまたはTLS対応サービスに接続するなど、TCPを使用し、悪意のある時間情報を提供しようとする敵に対する保護を提供します。

$ tlsdate -V -n -H encrypted.google.com

ここから:
'ntpdate-s ntp.ubuntu.com`

ntpdateの’-b’フラグに注意してください。 Ntpdateのmanページから:"adjtime()システムコールを使用してslewed(デフォルト)ではなく、settimeofday()システムコールを使用して時間を強制的にステップ化します。 このオプションは、起動時に起動ファイルから呼び出されるときに使用する必要があります。"以下の答えの多くはそれを含んでいません、そしてそれは物事を働かせる上での問題の一部かもしれません。 128ミリ秒以上のオフセットがデフォルトの’slew’メカニズムを使用して同期するのに時間がかかることがあると言及している’-B’フラグを考えてくださ

'timedatectl`ですが、How to update system time behind a proxy? - Ask Ubuntu

/Etc/rcにsudoを使用する必要はありません。ロケールファイル。. それらはすでにrootとして実行されています。