udev ルールは echo コマンドには適用されますが、cp コマンドには適用されません。

udev ルールは echo コマンドには適用されますが、cp コマンドには適用されません。

USBキーからマイコンピュータにファイルを自動的にコピーするudevルールを作成しました。

ACTION=="add",KERNEL=="sd[d-z][1-9]",ATTRS{serial}=="0701278A8DAE6B42",RUN+="/home/marco/Documents/MesScripts/essai_udev.sh"

私のスクリプトは次のとおりです

#!/bin/sh 
exec /bin/cp /media/marco/EMTEC/2nde_2023_2024/DS1/DS1.pdf /home/marco/Documents/Travail/Malherbe/2nde/Malherbe_2023_2024/DS/DS1/ 

ここでEMTECは私のUSBキーです。また、「cp」または「/bin/cp」を書いてみましたが、何の効果もありませんでした。このコマンドを変更すると

echo "Hello!" > toto.txt *

効果がある!誰でも私を助けることができますか?

ベストアンサー1

udev実際には、デバイスを使用する作業ではなく、後でシステムの他の部分で使用できるようにデバイスを設定する簡単な作業に適しています。これらの複雑な操作は、次のudevイベントを受け取る外部アプリケーションによって最適です。ユディックス(山),ネットワーク管理者(インターネット)など

~からudev マンページ:

RUN{type}(...) は、非常に短時間実行される前景ジョブにのみ使用できます。長期実行イベントプロセスは、そのデバイスまたはスレーブデバイスに対するすべての追加イベントをブロックできます。

プログラムが実行されているので注意してください。Webにアクセスする udevルール内では、ファイルシステムのマウント/マウント解除は許可されません。、 systemd-udevd.service で実施されるデフォルトのサンドボックスのため。

デーモンやその他の長期実行プロセスは開始できません。切り離されたかどうかにかかわらず、分岐されたプロセスはイベント処理が完了した後に無条件に終了します。 udevルールで長期実行プロセスを有効にするには、サービスユニットを提供し、SYSTEMD_WANTSデバイス属性を使用してudevデバイスからそれを取得します。バラより システム機器(5)もっと学ぶ。

私が強調するのは、ルールが実行されたときにファイルシステムがマウントされないことです。これがcpコマンドが失敗する理由です。

システムの自動マウントをバイパスし、デバイスを直接マウントする場合は、以下を参照してください。その答え

個人的には、私のシステムに通常どおりデバイスを自動的にマウントし、トリガーするいくつかのイベントを受け取るようにしますcp。システムと好みによって異なる場合があります。Dバスイベントや利用inotifyFSイベントをキャプチャします。

おすすめ記事