Time

通過 GPS 加密狗設置時間

  • September 24, 2016

有這段程式碼聲稱可以設置你的 Linux 環境的時間,

http://blog.petrilopia.net/linux/raspberry-pi-set-time-gps-dongle/

date -s '01/01/2014 00:01'
sleep 1
pkill ntpd
pkill gpsd
gpsd -b -n -D 2 /dev/ttyUSB0
sleep 2
GPSDATE=`gpspipe -w | head -10 | grep TPV | sed -r 's/.*"time":"([^"]*)".*/\1/' | head -1`
echo $GPSDATE
date -s "$GPSDATE"
/usr/sbin/ntpd

但是當我通過 puTTy 執行這段程式碼時,它會設置我的時間,

2010 年 8 月 8 日星期日 06:08:11 PKT

我想知道為什麼它將我的 GPS 時間設置為 2010 年而 2013 年。

這是gpspipe -w命令的輸出

{"class":"TPV","tag":"MID2","device":"/dev/ttyUSB0","mode":1,"time":"1990-12-22T23:59:53.020Z","ept":0.005}
{"class":"TPV","tag":"MID2","device":"/dev/ttyUSB0","mode":1,"time":"1990-12-22T23:59:54.020Z","ept":0.005}
{"class":"SKY","tag":"MID4","device":"/dev/ttyUSB0","time":"1990-12-22T23:59:55.010Z"}
{"class":"TPV","tag":"MID2","device":"/dev/ttyUSB0","mode":1,"time":"1990-12-22T23:59:55.010Z","ept":0.005}
{"class":"TPV","tag":"MID2","device":"/dev/ttyUSB0","mode":1,"time":"1990-12-22T23:59:56.020Z","ept":0.005}
{"class":"TPV","tag":"MID2","device":"/dev/ttyUSB0","mode":1,"time":"1990-12-22T23:59:57.020Z","ept":0.005}

輸出是連續的,這意味著它每秒都在變化。

由於$GPSDATE被報告為

Sun Aug 8 06:08:11 PKT 2010

date -s命令正在執行您告訴它執行的操作。為什麼它報告錯誤的年份(或根本沒有)?我不知道。

既然您已經在使用ntpd,為什麼不滿足於讓 NTP 做它的事情呢?這是一個“我想讓 gpsdate 工作,因為它在那裡”的問題嗎?

幫助我們幫助您調試它的最佳方法是提供完整的輸出

gpsdate -w

在你的問題中。

為響應 gpsdate 輸出而添加:

根據gpsd 文件,當 TPV 記錄的模式欄位為1“無修復”時。這意味著 GPS 接收器沒有看到足夠的(或任何)衛星數據。這意味著時間值是垃圾,如果您看到 1990 年或 2014 年,這肯定是有意義的。在您的腳本中,sleep 2幾乎沒有時間gpsd來獲得正確的 GPS 定位。等待更長的時間可能會有所幫助,沒有連接合適的天線意味著您將永遠等待修復。

實現的網路時間協議ntpd不需要 GPS 工作。它與其他網際網路主機交換時間同步資訊,其中一些確實從 GPS 等參考獲得時鐘。由於您的腳本會停止並重新啟動您的 ntpd,因此您可以忘記 GPS 修復並使用它。例如,我正在輸入的機器使用 ntpd,它比 UTC 時間差 +4.7 毫秒,這對於許多用途來說都非常準確。您可以使用它ntpq -p來了解您的時鐘是否同步以及同步程度如何。

引用自:https://unix.stackexchange.com/questions/97224