ローカルディレクトリを外部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
私はこれについて多くの洞察を持っていません。私はそれがうまくいくかもしれないと思った。しかし、そうではありません。ドライブがマウントされる前にコマンドが実行されることがあると読みました。私が間違っていることと、これがどのように機能するかについての洞察を教えてください。また、スクリプト内のコマンドを実行する前にしばらく待機させる方法はありますか?
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
バックアップを開始する前に、ディスクのプットチェックロジックが書き込み可能であり、適切にマウントされています。
ディスクがマウントされるまで待機を追加できます
例えば:
while ! [ -w /media/abhishek/Hachiko ]
do sleep 1
done
ただし、ドライブを接続するときにGUIにログインしている必要があります。おそらく、自動マウントをオーバーライドして、ドライブを明示的にマウントすることをお勧めします。