スクリプトは実行されません

スクリプトは実行されません

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

今、すべてがうまくいきます!

おすすめ記事