3

BeagleBone を使用していますが、RTC とバッテリ バックアップが組み込まれていないため、再起動するたびに日付が失われます。次のコマンドで日付を簡単に設定できます。

/usr/bin/ntpdate -b -s -u pool.ntp.org

しかし、たとえば家の電源が切れて再びオンになると、時間が失われます。最新のビーグルボーン Angstrom Linux ディストリビューションに付属する解決策は、30 分ごとに時刻を更新する crontab 行を入れることです。ただし、電源投入時にコマンドを1回だけ実行することをお勧めします。

上記のコマンドを@reboot行を使用してcrontabに入れてみましたが、ネットワークが構成される前に実行されたか、または5分間電源を抜いて入れたときに適切な時間が得られなかったため、他の何かが失敗したと思いますビーグルボーンに戻ります。

ifconfig などを使用して、ネットワークが利用可能になった後にのみ init.d からスクリプトを実行する方法はありますか?

4

2 に答える 2

7
opkg install ntp-systemd
systemctl enable ntpdate.service
systemctl enable ntpd.service

/etc/ntp.conf を編集し、次の行にコメントを付けます (存在しないハードウェア クロックへのフォールバックはなく、ntpdate サービスが「ntpd -q」コマンドを使用するため)。

#server 127.127.1.0
#fudge 127.127.1.0 stratum 14

次の 2 つのサービスがインストールされます。

/lib/systemd/system/ntpd.service:

[Unit]
Description=Network Time Service
After=network.target

[Service]
Type=forking
PIDFile=/run/ntpd.pid
ExecStart=/usr/bin/ntpd -p /run/ntpd.pid

/lib/systemd/system/ntpdate.service:

[Unit]
Description=Network Time Service (one-shot ntpdate mode)
Before=ntpd.service

[Service]
Type=oneshot
ExecStart=/usr/bin/ntpd -q -g -x
RemainAfterExit=yes

ntpd は、ネットワークがアップした後に開始されるため (After=network.target)、日付は継続的に同期される必要があります。しかし、ntpdのmanページで説明しています:

今日のほとんどのオペレーティング システムとハードウェアには、電源がオフになっている間も時刻を維持するための年 (TOY) チップが組み込まれています。マシンの起動時に、オペレーティング システムの時刻を初期化するためにチップが使用されます。マシンが NTP サーバーに同期された後、オペレーティング システムは時々チップを修正します。TOY チップがない場合、または何らかの理由でその時間がサーバー時間から 1000 秒を超えている場合、ntpd は何かがひどく間違っているに違いないと想定し、信頼できる唯一のアクションはオペレーターが介入して時計を手動で設定することです。これにより、ntpd が終了し、システム ログにパニック メッセージが出力されます。-g オプションはこのチェックを上書きし、クロックはチップ時間に関係なくサーバー時間に設定されます。ただし、壊れたハードウェアから保護するために、

したがって、ntpd を開始する前に日付を設定する必要があります。これは、ntpd.service を開始する前に「ntpd -q -g -x」を実行することにより、ntpdate サービスによって行われます。

ntpd のマニュアルページから:

-q クロックが最初に設定された直後に ntpd を終了します。この動作は、廃止予定の ntpdate プログラムの動作に似ています。-g および -x オプションは、このオプションと一緒に使用できます。注: このオプションを使用すると、カーネル時間規則が無効になります。


Beaglebone にインストールされた別のサービスは、日付/時刻と対話します

タイムスタンプ.サービス

[Unit]
Description=Timestamping service
ConditionPathExists=/etc/timestamp
After=remount-rootfs.service

[Service]
RemainAfterExit=yes
ExecStart=/usr/bin/load-timestamp.sh
ExecStop=/usr/bin/load-timestamp.sh --save

このサービスは、停止時に現在のタイムスタンプを /etc/timestamp に保存し、開始時にそのタイムスタンプから日付を設定します。したがって、ntpd がインストールされておらず、日付が手動で設定され、ビーグルボーンが再起動された場合、日付は起動時間だけ遅れます。

于 2012-07-25T19:57:49.883 に答える
0

ターゲット システムに /etc/network/if-post-up.d/ ディレクトリがありますか? その場合、ネットワークが起動したときにそのディレクトリ内のスクリプトを実行する必要があります。そうでない場合、DHCP を使用していますか? DHCP クライアントがスクリプトの実行をサポートしている場合があります。

于 2012-07-10T19:17:43.963 に答える