私は、Ubuntu 13.10の下で、udevについて理解しようとしています。
これが最初の簡単な95.usbbackup.rulesルールです。
ACTION=="add", SUBSYSTEMS="usb", RUN+="/usr/local/bin/my_backup.sh"
そして、これがスクリプトです(chmodded + x)my_backup.sh:
#!/bin/bash
touch /tmp/test
外付けドライブを接続しても何も起こりません。ルールが実行されたかどうか(ログ、コマンドなど)を確認するにはどうすればよいですか?
どうもありがとう
私はこれがうまくいくと確信しています。ルールの編集後にudevルールをリロードしましたか?
udevadm control --reload-rules && udevadm trigger
をルートとして。
次のようにrootとしてコマンドを与えることができます:
udevadmモニター
ルールが実行されたときに表示されます。
カーネル3.0.35を実行していますが、次のように動作します。
デバイスのパスを取得するには、次のようにします。
udevadm info --name /dev/sda1 --query all
必要以上の情報が得られますが、DEVPATHに興味があります。次に、実行されているudevルールを確認するには、次のコマンドを実行します。
udevadm test DEVPATH
これは実際にルールを実行するとは思わない、ドキュメントはこれが特定のデバイスのイベントを「シミュレート」することを述べています。詳細については、次のマニュアルページを確認してください。 https://www.freedesktop.org/software/systemd/man/udevadm.html
Rootとしてudev/systemdバージョン241および類似のものを使用:
udevadm control --log-priority=debug
journalctl -f
または、永続的にするには、再びrootとして次のようにします。
vi /etc/udev/udevd.conf
systemctl restart systemd-udevd
journalctl -f
PS:最も頻度が高いが私見間違っている回答は次のようになります。
udevadm -d test/devices/where/is/my/device |&less
...しかし、これには多くの問題があります。主なもの:
where/is/my/device
?退屈で複雑でエラーが発生しやすい。
最近のudevバージョン241の出力に対する古い回答を比較すると、udevadm test
は以前の情報よりも表示が少ないようです。
udevadm -d test
シミュレーションのみ!警告するたびに:
このプログラムはデバッグ専用であり、RUNキーで指定されたプログラムを実行しません。一部の値が異なる場合や、シミュレーションの実行時に使用できない場合があるため、正しくない結果が表示される場合があります。
udevadm test
は、新しいルールを開発するためのものであり、ルールが壊れている、欠落している、または上書きされている場合のトラブルシューティングではありません。
udevadm test $(udevadm info --query=path --name=device_name)
は、関連するudev
ルールを引用して、デバイスプラグインで実行されるコマンドwouldを通知する必要があります。例えば:
# udevadm test /block/sdd
...
udev_rules_apply_to_event: PROGRAM '/sbin/multipath -c /dev/sdd' /lib/udev/rules.d/40-multipath.rules:11
...
Raspberry Pi 3 B +でも同じ問題が発生していました。 USBストレージデバイスの挿入時にスクリプトを呼び出そうとしました。ルールはsyslogに記録されないため、どのルールが機能したか、どのルールが失敗したかを理解することが非常に難しくなります。
だから私は次のことをしました:
Sudo /etc/init.d/udev restart
チェックしたところ、うまくいきました。
有用な場合とそうでない場合がある情報の1つは、ステップ2のコマンドが実行されるまで、ファイルシステムはudevに対して読み取り専用であるということです。