最近導入した NAS に、ローカルネットで運用している Web アプリのデータをバックアップする。
まずは NAS 側の設定。以下の2点。
- バックアップ用ユーザーを作る
rsync
を有効にして、バックアップ用ユーザーとパスワードを設定する
バックアップ用ユーザーのユーザーフォルダの中にデータをバックアップする、という形だ。パスワードじゃなく ssh でやりたかったんだけど、NAS が対応してないみたいなので仕方がない。
さて、アプリ側の設定。rsync
コマンドを使うんだけど、パスワードを対話式で入力を求められるので、困った。やったことないぞ。
で、このページが参考になった。
expect
コマンドで対話をシミュレートできるようだ。
そういうわけでまずは expect
のインストール。
takatoh@unclemeat:~$ sudo apt install expect
それから、次のようにバックアップスクリプトを書いた。
#!/usr/bin/sh
NAS_HOST=rdnzl
NAS_PORT=873
NAS_USER=backupuser
NAS_PASSWD=backuppass
SRC_PATH=/mnt/data/app/photos/
DEST_PATH=home/app/photos
expect -c "
set timeout -1
spawn rsync -azv --delete --port ${NAS_PORT} ${SRC_PATH} ${NAS_USER}@${NAS_HOST}::${DEST_PATH}
expect \"Password: \"
send \"${NAS_PASSWD}\n\"
expect eof
"
/mnt/data/app/photos フォルダ以下のデータを、NAS のバックアップ用ユーザーフォルダの app/photos フォルダにバックアップする。rsync
コマンドがパスワードを聞いてきたら入力する、というのを expect
コマンドがやってくれる。
さて、これで無事バックアップが取れるようになった。