翻舊帳

2024年4月30日 星期二

Linux 的 timezone 設定問題

 昨天遇到一個謎團.

系統開機, 會先以正常的方式同步網路時間:
1. 使用 zoneinfo 的檔案更換 /etc/localtime
2. NTP client sync

接著詢問私網的 server, 獲得特定時區的差, 重新同步一次時間
3. 詢問時間差
4. 把 /etc/localtime 換回 UTC
5. NTP client sync, 另外加上時間差

謎團在於, 系統看到的時間, 與 daemon 裡看到的時間不同步.

舉例, #1 把時區設定為 Asia/Taipei, 做完 #5 之後, 會發現, Linux 系統跟 state machine daemon 的時間會差 8 個小時. Linux 系統使用 date, 會看到時區是 UTC, daemon 裡看到的時區應該是 CST(GMT+8).

很明顯, daemon 在 #4 之後沒有跟著變為 UTC.

如果在 #1, #4 變動 timezone 之後, 使用 setenv("TZ", timezone string, 1) 呢?

1. 使用 zoneinfo 的檔案更換 /etc/localtime, setenv("TZ", timezone string, 1)
2. NTP client sync
3. 詢問時間差
4. 把 /etc/localtime 換回 UTC, setenv("TZ", "UTC", 1)
5. NTP client sync, 另外加上時間差

則會出現另一個問題: daemon 裡看到的時區會回到 UTC, 但 Linux 系統裡面看到的時區則停在 CST(GMT+8). 此時回到 Linux 系統, 使用 "set" command 查詢系統參數, 會看到 TZ='Asia/Taipei'.

也就是說, #4 即使 setenv(), 也僅作用於 deamon, Linux 系統卻沒有跟著變動.
怪異的是, #1 的 setenv(), 則會作用在 Linux 系統. 因為當我把 setenv() 拿掉的時候, Linux 系統中的 TZ, 就都不會存在.

我的猜測是, 系統設定值在每個 process 應該是獨立的? 可是這樣無法說明為什麼 #1 的 setenv() 會波及 Linux 系統.

2024年4月20日 星期六

Toyota Collora Cross Hybrid 油耗紀錄

2024/3/17 牽車

2024/4/20 油耗 21.2KM/L, 市區高速各約佔一半。


2024/5/4 油耗 21.4KM/L



2024/5/14 油耗 21.5KM/L




2024年4月1日 星期一

DIY -- Cross 加裝胎壓顯示器

新一代的車子都取消了備胎, 為了因應這問題, 胎壓偵測就顯得重要了. 在輪胎的氣漏光之前發現問題, 及早處理, 應該能避免動用到備胎.

政府目前的法規有規定, 新車的車胎都要加裝胎壓偵測器, 老婆那台 Swift 就有內建, 而且每隔一段時間, 就會被胎壓過低的嗶嗶聲所困擾, 每次都只能回廠處理. 我到現在還是沒搞懂 Swift 的胎壓要怎麼重置, 它的人機介面真的不友善.

新車 Cross 當然有偵測器, 不過, 和泰把每個輪胎胎壓的解碼顯示器當成選配...我原本打算抝業務送我, 但沒成功. 沒關係, 蝦皮買得到, 店家還提供 DIY 的影片, 我們自己來就好.




星期日一大早, 把車開到路邊, 依樣畫葫蘆. 結果出師不利, 第二顆卡扣卡在鈑金上面沒有跟著車身飾板起來...囧


接下來卡關的, 就是拆下原本的排線. 原廠的排線接頭, 在卡榫上方有一個橫條機構, 讓人很難按下去. 我最後是拿拆手機的塑膠工具協助才拆下來的.




裝好之後還要歸零重置, 很幸運地, 每顆輪胎都在該在的位置上.

搞定.