USB HDDが接続されるとスクリプトを実行するシステムサービス

USB HDDが接続されるとスクリプトを実行するシステムサービス

USB HDDが接続されているときにバックアップスクリプトを実行しようとしていますが、Ubuntu 16.04を使用しています。

また、バックアップスクリプトは、完了したらディスクをアンマウント(およびシャットダウンすることもできます)する必要があります。

/etc/fstabこのディスクのエントリはありません。単にタグ(4TB)を割り当てると、koichiroseが所有するタグe2labelに自動的にマウントされます。/media/koichirose/4tb今まではそんなに良くなった。

システムサービスは次のとおりです。

[Unit]
Description=Launches backup script when the 4TB WD drive is plugged in
Requires=media-koichirose-4tb.mount
After=media-koichirose-4tb.mount

[Service]
ExecStart=/home/koichirose/scripts/backup_to_4tb

[Install]
WantedBy=media-koichirose-4tb.mount

これを有効にしてHDDを接続すると、/media/koichirose/4tbルートが作成および所有され、すぐに/media/koichirose/4tb1koichiroseが作成および所有されます。実際、ドライブは4TB1に取り付けられていますが、4TBは空です。その後、「4tb1」ではなく「4tb」を探すため、バックアップスクリプトが実行され失敗します。 4tb1を削除すると、ルートが所有する4tbがまだ存在します。

サービスを無効にすると、すべてが再び正常に動作し、ドライブは4TBにマウントされ、ディレクトリはユーザーが正しく所有します。

この問題をどのように解決できますか?

ボーナスの質問:私のスクリプトの終わりに現在実行中ですumount。これはうまくいきますが、次のことがわかりました。

udisksctl unmount -b /dev/sdc1
udisksctl power-off -b /dev/sdc

これによりドライブがマウント解除され、電源が切れます。これには2つの問題があります。 sudoパスワードを要求し(無人実行を望む)、マウントポイントの代わりにデバイス名(変更される可能性があります)を使用します(「静的」に設定しようとしました)。

編集:バックアップスクリプト(/home/koichirose/scripts/backup_to_4tb)は次のとおりです。

#!/bin/bash

export RESTIC_PASSWORD="mypassword"
repo_path=/media/koichirose/4tb/restic_incoming_backups
dir_to_backup=/home/koichirose

/usr/local/bin/restic -r $repo_path backup $dir_to_backup

#replace with udisksctl later...
umount /media/koichirose/4tb

ベストアンサー1

おすすめ記事