web-dev-qa-db-ja.com

udevルールが実行されたかどうかを確認するにはどうすればよいですか?

私は、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

外付けドライブを接続しても何も起こりません。ルールが実行されたかどうか(ログ、コマンドなど)を確認するにはどうすればよいですか?

どうもありがとう

16
pouzzler

私はこれがうまくいくと確信しています。ルールの編集後にudevルールをリロードしましたか?

udevadm control --reload-rules && udevadm triggerをルートとして。

5
Redsandro

次のようにrootとしてコマンドを与えることができます:

udevadmモニター

ルールが実行されたときに表示されます。

3
user2703782

カーネル3.0.35を実行していますが、次のように動作します。

デバイスのパスを取得するには、次のようにします。

udevadm info --name /dev/sda1 --query all

必要以上の情報が得られますが、DEVPATHに興味があります。次に、実行されているudevルールを確認するには、次のコマンドを実行します。

udevadm test DEVPATH

これは実際にルールを実行するとは思わない、ドキュメントはこれが特定のデバイスのイベントを「シミュレート」することを述べています。詳細については、次のマニュアルページを確認してください。 https://www.freedesktop.org/software/systemd/man/udevadm.html

2
JSunderland

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は、新しいルールを開発するためのものであり、ルールが壊れている、欠落している、または上書きされている場合のトラブルシューティングではありません。

1
MarcH

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
...
0

Raspberry Pi 3 B +でも同じ問題が発生していました。 USBストレージデバイスの挿入時にスクリプトを呼び出そうとしました。ルールはsyslogに記録されないため、どのルールが機能したか、どのルールが失敗したかを理解することが非常に難しくなります。

だから私は次のことをしました:

  1. ルールファイルを/etc/udev/rules.d/100-myrule.rulesに作成しました
  2. 次に、コマンドSudo /etc/init.d/udev restart

チェックしたところ、うまくいきました。

有用な場合とそうでない場合がある情報の1つは、ステップ2のコマンドが実行されるまで、ファイルシステムはudevに対して読み取り専用であるということです。

0
MSharq