当数据陈旧、USB 设备不断变化时重新启动 nut-driver

当数据陈旧、USB 设备不断变化时重新启动 nut-driver

我有一个 PowerWalker VI 850 LCD ups,通过 USB 连接到 Raspberry Pi Model B+。我一直尝试使用NUT来监控它,但问题很多。首先,协议检测似乎无法正常工作,而且我已经指定了protocol = mustek,这似乎已经部分稳定了它——现在每次我启动坚果驱动程序服务时,它实际上都会连接。

然而,另一个怪癖是,由于某种原因,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。更好的想法?

答案1

想通了...因为我的问题与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"

这不会在数据过时时重新启动 nut-driver,而是在 USB 设备重新连接时(或者无论您如何称呼它正在执行的操作)重新启动。这似乎已经解决了问题。

相关内容