Linux comp001 3.18.6-2-ARCH #1 PREEMPT Sun Feb 8 09:43:43 MST 2015 armv6l GNU/Linux
リアルタイムクロックハードウェアカーネルでArchLinuxを実行するrPi B +があります。リアルタイムクロックPi。しかし、起動時にインターネット接続があることを確認し、ntpクライアントを実行したいと思います。 ntpクライアントがntpサーバーに接続して時計を取得したら、時計をハードウェアと同期しようとしました。インターネット接続(ntpクライアントが戻りコードを確認する)がオフラインの場合にのみハードウェアクロックを使用したいと思います。私はサービスを構築しましたが、正常に実行されていますが、ntpクライアントが問題なく起動したことを確認する方法がわかりません。どうやって確認しますか?まあ、空白を修正して次のスクリプトを操作してきましたが、まだ動作しません。
#!/bin/sh
if [ ?('modprobe -v rtc_ds1307') = 0 ]; then
# rtc is connected and working, use it
echo "RTC Hardware connected, getting time"
systemctl disable ntpd.service
systemctl stop ntpd.service
echo "ds1307 0x68" > /sys/class/i2c-adapter/i2c-1/new_device
hwclock -s
else
# rtc is offline / not connected, get time via ntp
echo "RTC Hardware disconnected/battery dead/offline, use NTP"
systemctl enable ntpd.service
systemctl start ntpd.service
fi
最初の3行でスクリプトの実行が失敗する理由:
./script_rtc.sh: line 3: syntax error near unexpected token `'modprobe -v rtc_ds1307''
./script_rtc.sh: line 3: `if [?('modprobe -v rtc_ds1307')=0]; then'
ベストアンサー1
次の方法でif句を書き直しました。
#!/bin/sh
modprobe -v rtc_ds1307
if [ $? -eq 0 ]; then
# rtc is connected and working, use it
echo "RTC Hardware connected, getting time"
systemctl disable ntpd.service
systemctl stop ntpd.service
echo "ds1307 0x68" > /sys/class/i2c-adapter/i2c-1/new_device
hwclock -s
else
# rtc is offline / not connected, get time via ntp
echo "RTC Hardware disconnected/battery dead/offline, use NTP"
systemctl enable ntpd.service
systemctl start ntpd.service
fi
今、すべてがうまくいきます!