udevルールが実行されたかどうかを確認する方法は?


15

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

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

どうもありがとう


2
どういうことかと思いますSUBSYSTEMS=="usb"。つまり、値をキーに割り当てる==単一=ではなく、同等性をテストするdouble です。
Lqueryvg

回答:


5

これはうまくいくはずです。ルールを編集した後、udevルールをリロードしましたか?

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


より狭いルールを作成しました:KERNEL == "sdb"、これは動作します。udevは、一部のハードウェアを一意に識別するルールのみを扱いますか?
pouzzler

いいえ、試してみてKERNEL!="sdz*"、すべてを取得する必要があります(sdz [1-9]を除く)
レッドサンドロ

5
これは本当に質問に答えません。ルールがトリガーされたかどうかはどうやってわかりますか?
ダニエルサンク

1
スクリプトが実行されているので知っています。ログファイルに書き込むことができます。またudevadm monitor
レッドサンドロ

2

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

udevadmモニター

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


11
udevadm monitorudevイベントのみを表示しますが、対応するルールが実行された場合は表示しません。ただし、ルールをトリガーするイベントを探すことはできますが、ルールが機能するかどうかはわかりません。
F.Raab

2

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

デバイスのパスを取得するには、次のようなことができます。

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

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

udevadm test DEVPATH

私はこれが実際にルールを実行するとは思わない、ドキュメントはこれが与えられたデバイスのイベントを「シミュレートする」と述べている。詳細については、次のmanページをご覧ください:https : //www.freedesktop.org/software/systemd/man/udevadm.html


1

ルートとしてudev / systemdバージョン241などを使用する場合:

udevadm control --log-priority=debug
journalctl -f

または、再びルートとして永続化するには:

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


0

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

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

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

そして私がチェックしたとき、それは働いた。

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


0

udevadm test $(udevadm info --query=path --name=device_name)どのコマンドを教えてくれなければならないだろう理由に、デバイスのプラグ上で実行されudev、関係のルールを。例えば:

# udevadm test /block/sdd
...
udev_rules_apply_to_event: PROGRAM '/sbin/multipath -c /dev/sdd' /lib/udev/rules.d/40-multipath.rules:11
...
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.