さて、これは私が達成したいものです。
いつでもスクリプトを実行するように複数のシステムを構成したいと思います。どのUSBスティックをマウントし、USBスティックに特定のフォルダがある場合は、その内容をシステムのフォルダにコピーします。
特定のUSBがマウントされたときにスクリプトを実行する方法を調べて見つけましたが、何も見つかりませんでした。次に、スクリプトが新しくマウントされたUSBスティックで自動的に機能するように、スクリプトのマウントポイントまたはルートパスをスクリプトまたは他の回避策に渡す必要があります。
実際にディレクトリを見つけて、実行したいディレクトリをコピーするスクリプトを作成しましたが、マウントされたUSBでそれを使用する方法がわかりません。
本質的に実際の理由は、スティックを複数のシステムに接続し、ファイルを各システムに自動的にコピーできるようにしたいからです。 2つのUbuntuインストールとラズベリーパイベースの別の2つのlibreelecがあるため、追加のパッケージをインストールするオプションはあまりありません。主に基本的なsystemdスクリプトとbashスクリプトが必要です。
私はUbuntuとlibreelecで動作するので、クロスLinuxソリューションが欲しいです。私はシステムdを使用することを好みますが、udevはより良い解決策になるかもしれません。
答え1
udevルールはこれを達成する最も簡単な方法です。 udevルールは/etc/udev/rules.d
通常、次の形式で保存され、それに従います。NN-filename.rule
ここで、NN
どのルールファイルが最初にロードされるかを決定します。
たとえば、/etc/udev/rules.d/10-local.rules
次を追加すると、リムーバブルブロックデバイスが接続されるたびに、次の形式のカーネル名でイベントがトリガされますsdX
。
KERNEL=="sd?", SUBSYSTEM=="block", ATTR{removable}=="1", RUN+="/path/to/script.sh"
デバイスがインストールされる前にスクリプトが起動される可能性があるため、デバイスを手動でインストールする必要があります。
他のルールを一致させたい場合は、使用しているデバイスによって引き起こされるすべてのイベントのプロパティを確認できますudevadm info -a /dev/devname
。