數據陳舊時重新啟動螺母驅動程序,USB設備不斷變化
我有一個通過 USB 連接到 Raspberry Pi Model B+ 的 PowerWalker VI 850 LCD ups。我一直在嘗試使用 NUT 來監控它,但問題很多。首先,似乎協議檢測工作不正常,我已經指定
protocol = mustek
並且這似乎已經部分穩定了它 - 現在每次我啟動它實際連接的 nut-driver 服務。然而,另一個怪癖是,由於某種原因,USB 設備在沒有警告或明顯原因的情況下不斷變化(例如,從
/dev/bus/usb/001/005
啟動時變為006
或)。我試圖通過在我的 udev 規則007
中添加一個參數來解決這個問題:SYMLINK
ACTION=="add", \ SUBSYSTEM=="usb", \ ATTR{idVendor}=="0665", ATTR{idProduct}=="5161", \ SYMLINK+="powerwalkerups" \ MODE="0660", GROUP="nut"
這確保
/dev/powerwalkerups
始終指向正確的匯流排設備。但是——似乎,至少——每當 USB 設備神奇地改變時,螺母驅動器就會失去連接,我會收到美妙的“數據陳舊”消息。只是,現在每當我重新啟動它時,它實際上會以良好的協議正確連接並正常工作。但我必須手動systemctl restart nut-driver
。如果數據過時,是否有自動方法讓 NUT 嘗試重新啟動驅動程序?或者有人可以推荐一個可以為我做這件事的看門狗類型的過程嗎?由於服務實際上並未停止,
systemd
因此不會將服務視為失敗。如何嘗試至少重新啟動一次服務以查看是否可以解決連接問題?(或者,知道如何首先阻止它斷開連接嗎?)
我的 NUT 主機上的正常執行時間現在是 5 天,USB 設備已經從 005 一直擺動到 012。所以,我在另一台主機上執行 Icinga2,我打算讓它重新啟動服務。 .但這需要從Icinga主機到NUT主機的SSH訪問:-P。更好的想法?
想出來了……因為我的問題與 USB 設備的變化有關,而且我上面已經有一個 udev 規則,所以我
RUN
向它添加了一條語句,如下所示:ACTION=="add", \ SUBSYSTEM=="usb", \ ATTR{idVendor}=="0665", ATTR{idProduct}=="5161", \ SYMLINK+="powerwalkerups", \ MODE="0660", GROUP="nut", \ RUN+="/bin/systemctl restart nut-driver"
這不是在數據過時而是在重新連接 USB 設備時(或您所說的它正在做什麼)重新啟動 nut-driver。這似乎解決了這個問題。