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
이제 모든 것이 잘 작동합니다!