web-dev-qa-db-ja.com

Udevルールが使用されていませんか?

udevをセットアップして、外付けUSBハードドライブが接続および取り外しられたときに処理します(まだマウントされていません)。これまでのところ、ファイルへのディスクの追加/削除をログに記録するために、/etc/udev/rules.d/10-local.rulesに2つの新しいルールを作成しました。

SUBSYSTEM=="block", ATTRS{model}=="2AS", ACTION=="add", RUN+="/bin/echo 'inserted lacie' >> /home/herman/udev_file"
SUBSYSTEM=="block", ATTRS{model}=="2AS", ACTION=="remove", RUN+="/bin/echo 'removed lacie' >> /home/herman/udev_file"

udevdデーモンを起動し、ハードドライブを数回再接続しましたが、/home/herman/udev_fileが作成されません。ルールでは、コマンドからのキーを使用しました udevadm info -a -n /dev/sdb これは問題のハードドライブです。私はここで何が間違っているのですか?ディスクが検出されており、mountは問題なく実行できます。助けていただければ幸いです。

6
user13742

udevはログ情報を/var/log/messagesに出力しますが、デフォルトではエラーのみをログに記録し、必要なことを実行せず、エラーも発生しないコマンドを作成したことがあります。 >>リダイレクトはシェルによって処理され、udevはシェルを介してコマンドを実行しないため、文字通りバイナリ/bin/echoを実行し、引数'inserted lacie' >> /home/herman/udev_fileを渡します。 udevを変更してさらにログを記録すると(/etc/udev/udev.confを編集してudev_log="info"行を追加)、そのコマンドが実行され、出力が'inserted lacie' >> /home/herman/udev_fileであることがわかります

個人的には、udevを再起動せずに編集できるように、必要なことを実行する短いシェルスクリプトを作成することを好みますが、/bin/sh -cを使用してコマンドを実行し、リダイレクトを処理することもできます。

SUBSYSTEM=="block", ATTRS{model}=="2AS", ACTION=="add", RUN+="/bin/sh -c '/bin/echo inserted lacie >> /home/herman/udev_file'"
8
Michael Mrozek