sh
ドライブメーカー、モデル、その他の仕様に関係なく、ハードドライブがマイコンピュータにホットプラグされるたびにカスタムスクリプトを実行したいと思います。
私のudevルールは次のとおりです/etc/udev/rules.d/10-TEST-RULE.rules
。
ACTION=="add", KERNEL=="sd*", RUN+="/usr/loca/bin/DRIVE_INSERT_MESSAGE.sh"
udev
ルールを数回再ロードし、ほとんどの変更後にデバイスを再起動しました。何が間違っていますか?
答え1
問題の性格
問題は、udevd
デフォルトでは、UbuntuがルートLinuxカーネルネームスペースで実行されないことです。
# ps -axe -o user,pid,ipcns,mntns,netns,pidns,userns,utsns,comm | awk '$3!="-"' | grep -E "udevd|$$|MNTNS"
USER PID IPCNS MNTNS NETNS PIDNS USERNS UTSNS COMMAND
root 477 4026531839 4026532239 4026531840 4026531836 4026531837 4026532259 systemd-udevd
root 1663933 4026531839 4026531841 4026531840 4026531836 4026531837 4026531838 bash
すべてのインストールは、udevd
コンピュータで実行されている残りのプロセスには見えません。スクリプトDRIVE_INSERT_MESSAGE.sh
は、システムの他の多くの部分と通信できない名前空間で実行されています。
問題をさらにデバッグするには、これを実行するsudo nsenter --all -t $(pgrep systemd-udevd) /bin/bash
と、あるスクリプトに移動しますudevd
。その後、スクリプトをナビゲートして調整できますDRIVE_INSERT_MESSAGE.sh
。
また、見ることができます
/usr/lib/udev/rules.d
udevルールを参照するにはudevadm
udevとの対話に使用されるEGは、トラブルシューティング時にudevイベントをトリガーします。sudo systemctl edit systemd-udevd
udevd systemctl デバイスの調整udevadm test-builtin --help
組み込みudevモジュールのリスト
長い話を短く
スクリプトが実行される可能性が高いが、制限されたカーネルネームスペースで実行されています。