デフォルトでは、さまざまなストレージデバイスにバックアップしたい小さなファイルがあります。新しいドライブ(起動時にハードドライブまたはシステムがすでに実行されている場合はフラッシュドライブ)をインストールするときにこのタスクを自動的に実行する方法はありますか?おそらく世界で最も効率的な方法ではないでしょう。しかし、ドライブを接続して考える必要がなく、ファイルの別のコピーを取得できれば素晴らしいでしょう。
答え1
使用するRUN+=
のは間違った方法です。示されているようにman udev
:
これは、非常に短期的に実行されるフォアグラウンドジョブでのみ使用できます。長期実行イベントプロセスは、そのデバイスまたはスレーブデバイスに対するすべての追加イベントをブロックできます。
デーモンや他の長期実行プロセスを開始することはudevには適していません。切り離されたかどうかにかかわらず、分岐されたプロセスはイベント処理が完了した後に無条件に終了します。
正しい方法はSYSTEMD_WANTS
(from man systemd.device
)を使用することです。
UDEVデータベースデバイスデバイス設定は、デバイスファイルを介してまたはudevデータベースで直接設定できます(推奨)。 systemd は次の udev 属性を理解します。
SYSTEMD_WANTS=リストされているすべてのデバイスに、このデバイスの欲求タイプの依存関係を追加します。特定のデバイスが利用可能な場合は、すべてのデバイスを有効にするために使用できます。 udevデータベースでデバイスに "systemd"文字列がタグ付けされていない場合、このタグとは異なるタグは考慮されません。そうしないと、デバイスがsystemdデバイスに公開されないためです。
必要なのはサービスファイルだけです/etc/systemd/system/media-USBDRIVE.mount.wants/
。
[Unit]
Description=Backup files to USBDRIVE
Requires=media-USBDRIVE.mount
After=media-USBDRIVE.mount
[Service]
ExecStart=/path/to/backupscript
[Install]
WantedBy=media-USBDRIVE.mount
注:ここでは、USBドライブ名はUSBDRIVEです/media/USBDRIVE
。
答え2
使用している場合は、systemd
この人こここの質問はすでに回答されています。
配置ルール
KERNEL=="sd?1",ACTION=="mount",RUN+="/path/to/script.sh"
存在する
/etc/udev/rules.d/
再実行時の警告事項に注意しroot
、必要な作業はすべてスクリプトに入れてください。