web-dev-qa-db-ja.com

外部SSDを接続するたびにrsyncを実行するシェルスクリプトを作成するにはどうすればよいですか?

ローカルディレクトリを外部ssdと同期するrsyncコマンドを実行したい。 このリンク。 の指示に従って、udevルールに基づいてコマンドを実行しました。これは、idVendorとidProductに基づいて特定のUSBドライブに対してコマンドを実行する方法を示しています。これが私の/etc/udev/rules.d/test.rules:にあるコマンドです

ATTRS{idVendor}=="0781", ATTRS{idProduct}=="558c", RUN+="/temp/auto_back.sh"

そして/tmp/auto_back.shで私はちょうど持っています

#!/bin/bash

# auto backup command 

rsync -avzh /home/abhishek/Dropbox /media/abhishek/Hachiko

私はこれについて多くの洞察を持っていません。私はそれがうまくいくかもしれないと思った。しかし、そうではありません。ドライブがマウントされる前にコマンドが実行されることがあると読みました。私が間違っていることと、これがどのように機能するかについての洞察を教えてください。また、スクリプト内のコマンドを実行する前にしばらく待機させる方法はありますか?

2
Abhishek Anand

Udevは、以下のような正しい情報をusbに渡した場合にのみ機能します。

KERNEL=="sd*", ATTRS{vendor}=="<Vendor name>", ATTRS{model}=="<Model>", ATTRS{serial}=="<serial>", RUN+="/your script path"

または、

ハードウェアの種類やその他の詳細がわからないため、完全なコードを記述できませんでしたが、このロジックを確認してcrontabを入力すると、長時間実行されるプロセスを使用するか、ログを確認し続けます。新しいハードウェアがdmesg出力に表示されるはずです。

if "string matching in dmesg" && "within 30s"; then 
     check disk is properly mounted
     check disk is writable
     start backup
fi

バックアップを開始する前に、ディスクのプットチェックロジックが書き込み可能であり、適切にマウントされています。

1
asktyagi

ディスクがマウントされるまで待機を追加できます

例えば:

while ! [ -w /media/abhishek/Hachiko ]
do sleep 1
done

ただし、ドライブを接続するときにGUIにログインしている必要があります。おそらく、自動マウントをオーバーライドして、ドライブを明示的にマウントすることをお勧めします。

0
Jasen