私はOpenSuse LeapでUdevルールを使用しており、USBデバイスがシステムに接続されているときに単純な小さなスクリプトを実行しようとしています。
ただし、キーワード "RUN+=" に追加したスクリプトは実行されません。
ステップは次のとおりです。
1) 私はルールを書いた」10_MY_RULES.ルール「提供された情報に基づいてウッドバーデムについて。
KERNEL=="sdf1", SUBSYSTEM=="block", SUBSYSTEMS=="usb", ATTRS{product}=="Flash Drive", ATTRS{manufacturer}=="Samsung",ATTRS{idProduct}=="1000", ATTRS{idVendor}=="090C", RUN="/home/user/bin/script.sh"
私のスクリプト"スクリプトファイル「次のように:
#!/bin/bash; mkdir /home/user/Desktop/CREATE_FOLDER_TEST
2) OpenSuse Leap は udev ルールを複数の場所に配布します。
場所は次のとおりです。
- /etc/udev/rules.d
- /usr/lib/udev/rules.d
- /run/udev/rules.d
私は「に私のルールを書いています。/run/udev/rules.d「USB機器の接続時を考えると、ウデブアクセスファイルは次の場所に作成されます。/走る。
3) 次のコマンドを実行します。
- udevadm制御 - ルールのリロード
- udevadm トリガー
4) 完了したら「udevadmモニター”周辺機器(この場合はUSB)が接続されているときにシステムが何をしているかを確認します。
5)私のフラッシュドライブがシステムに追加されたときに何も実行されず、私のスクリプトが実行されないことがわかりました。そのため、次のコマンドを実行して特定のデバイスでルールをトリガーします。
- udevadm test --action=/path/to/device を追加
図の最後の行に示すように、私のルールを読んでいるのを見ました...
運が悪く、ルールを変更して変更しました。さらに追加カーネル、サブシステム、属性など
上記のすべての項目は両方のモードで実行されます。根そしてユーザー。
答え1
手動で試してみましたscript.sh
か?
私は試して得た
bash: ./script.sh: /bin/bash;: bad interpreter: No such file or directory
#!
スクリプト行では、コマンド区切り文字としてセミコロンを使用することはできません。この行は、スクリプトインタプリタと可能なオプションを指定するためにのみ使用されます。
実際には、script.sh
udevルールを実行していないため、ルールが失敗したようです。 @eblockが述べたように、必要な最小限の検査数を使用する必要があります。ルールが機能しない場合は、スキャンを追加するのではなく、一部のスキャンを削除する必要があります。
また、/run
tmpfsファイルシステム(=デフォルトではRAMディスク)にあるため、永続性がないことに注意してください。ここに置いたすべての内容は、次の再起動後に消えます。したがって、/run/udev/rules.d
他のルールまたは他の自動化によって生成された自動生成ルールにのみ使用する必要があります。
/usr/lib/udev/rules.d
展開の標準ルールです。システム管理者は、/etc/udev/rules.d
必要に応じて標準ルールを補完または上書きする必要があります。