USBディスクがマウントされたらバックアップスクリプトを実行する

USBディスクがマウントされたらバックアップスクリプトを実行する

USBドライブがあり、それを接続すると自動的に復号化されマウントされます。次に、インストール後にバックアップスクリプトを実行して、ローカルFSをディスクに同期します。その後、ドライブを取り出した。

ドライブを挿入すると、パスワードが復号化されてマウントされ、スクリプトが実行され、ドライブがマウント解除/オフされるように、このタスクを自動化したいと思います。 (完了したら通知を受け取ればいいのですがオプションです。)

だから私はsystemdを使ってみましたが、他のソリューションでも開いています。 (今はsystemdとの間で時間を費やしましたが、これがどのように機能するのか理解したいです。)

現在、私はUSBドライブのインストールに依存するサービスを作成しようとしています。ただし、ドライブが接続されていない場合、サービスはアクティブではなく、マウントが存在しないと文句を言います。

次に、パス単位を作成しようとします。

[Unit]
Description=Monitors the backup path availability

[Path]
PathExists=/run/media/user/backup

[Install]
WantedBy=multi-user.target

パスが利用可能な場合、そのサービスが開始されます。

[Unit]
Description=Rsync System Backup
Requires=usb-hd-backup.path

[Service]
ExecStart=/usr/bin/rsync -aAXS --info=progress2 --delete --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} / /run/media/user/backup


[Install]
WantedBy=graphical.target

最初は大丈夫です。ただし、ドライブをマウント解除すると、パスはそのまま残ります(スクリプトを手動で起動すると、これは発生しません)。したがって、次にドライブを接続すると、パスワードが復号化され、元のパスがすでに存在するため、別のパスにマウントされます(元のものと同じで、最後に「1」が追加されます)。したがって、スクリプトはドライブに接続されていないパスで実行されます(そして/ runのインストールは非常に小さいため失敗します)。

私はsystemdに私がここで実際に理解していないいくつかのアイデアがあると思います。

ベストアンサー1

おすすめ記事