通過 GPS 加密狗設置時間
有這段程式碼聲稱可以設置你的 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
來了解您的時鐘是否同步以及同步程度如何。