Debian

添加 udev 規則會導致 systemd 網路超時

  • October 1, 2018

當我的筆記型電腦連接到充電器或斷開連接時,我試圖讓 udev 執行某些腳本。

為此,我在其中創建了一個文件99-local.rules並將/etc/udev/rules.d以下內容放入其中:

ACTION=="change", SUBSYSTEM=="power_supply", ATTR{online}=="1", RUN+="/usr/sbin/onchg.sh"
ACTION=="change", SUBSYSTEM=="power_supply", ATTR{online}=="0", RUN+="/usr/sbin/onbatt.sh"

但是,在文件就位後,系統似乎在“提高網路介面”目標期間掛起一段時間,該目標在顯示的 5 分鐘中的 2 分鐘後超時。

如果我刪除文件,那麼它工作得很好。

udev 甚至與網路介面啟動有什麼關係,我怎樣才能讓它盡快啟動但保持這些規則?

udevadm settle的輸出中的一個關係是systemctl cat networking

ExecStartPre=-/bin/sh -c '[ "$CONFIGURE_INTERFACES" != "no" ] && [ -n "$(ifquery --read-environment --list --exclude=lo)" ] && udevadm settle'

考慮一下man udev關於RUN密鑰的內容:

這只能用於執行時間很短的前台任務。長時間執行事件程序可能會阻止此設備或從屬設備的所有進一步事件。

udev 不適合啟動守護程序或其他長時間執行的程序;事件處理完成後,分叉的程序,無論是否分離,都將被無條件終止。

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