ページ : 1 2
オフサイトバックアップスクリプトの改善
オフサイトバックアップを担うSynology DS212jのタスク設定にもメールによる報告がありますが、情報過多を嫌って異常時にのみメール発信としていました(今回のように「空っぽを同期」すること自体は正常終了なので、異常に該当せず)。大切なストレージなのでこのオプションを外し、正常終了時もメールによる報告を受け取るよう変更しました。
尚、タスクはメール報告に渡す標準出力とログファイルへの追記、双方へのストリームを維持するために、teeコマンドを使っています。
1 |
/volume1/homes/admin/rsync_Pi2Syno.sh | tee -a /volume1/homes/admin/rsync_Pi2Syno.log |
タスクが実行されると、日本語でかしこまったメールが届きます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
お客様各位、 タスク スケジューラは、予定されているタスクを完了しました。 タスク: miuraPi2Syno 開始時間: Tue, 29 Dec 2020 09:46:29 GMT 停止時間: Tue, 29 Dec 2020 09:47:00 GMT 現状: 0 (正常) 標準出力/エラー: 2020-12-29_09:46:29 : Starting rsync receiving incremental file list PR-S300SE/incoming.htm PR-S300SE/outgoing.htm sent 10157 bytes received 585295 bytes 23351.06 bytes/sec total size is 69150747665 speedup is 116131.52 2020-12-29_09:47:00 : Finished rsync Elapsed time = 31 seconds 送信元 nas06 |
さらにRAIDストレージのマウントポイントが空かどうかチェックして空の場合はバッチ終了させるようにします。ssh越しにリモートのパスが空であるかどうかは、次のように得られます。
1 2 3 4 5 6 7 8 9 10 11 12 |
## 中身あり(正常) $ ssh user@XXX.XXX.XXX.XXX -p 0000 'test -z "$(ls -A /mnt/md6/)" ; echo $?' 1 ## 中身なし(異常) $ ssh user@XXX.XXX.XXX.XXX -p 0000 'test -z "$(ls -A /mnt/md2/)" ; echo $?' 0 ## ディレクトリすらなし(異常) $ ssh user@XXX.XXX.XXX.XXX -p 0000 'test -z "$(ls -A /mnt/md5/)" ; echo $?' 0 ls: cannot access /mnt/md5/: No such file or directory |
これを元にオフサイトバックアップスクリプトを次のように改善しました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
#!/bin/sh #variables dst="/volume1/SOMEDIR/SUBDIR/" src="UUU@XXX.XXX.XXX.XXXX:/mnt/md6/" #Options: add 'z' for compression, add 'n' for dryrun (test) so -avRzn optsyc="-avz --delete --exclude lost+found --exclude *.iso --exclude .recycle --bwlimit=600 --timeout=600" optssh="-p 0000" #write start time/date in logfile echo "`date +%Y-%m-%d_%H:%M:%S` : Starting rsync" start=`date +%s` #src storage validation sshcom="if [[ ! -z \$(ls -A "$(echo $src | cut -d: -f2)") ]]; then echo 1; else echo 0; fi" res=`ssh $(echo $src | cut -d: -f1) $optssh "$sshcom"` if [ $res != "1" ]; then ## REMOTE PATH IS EMPTY OR NON-EXIST echo "`date +%Y-%m-%d_%H:%M:%S` : Remote Path is Empty / Non-Exist, Batch Aborted." exit 1 fi #perform rsync (modify path to your exclude file!) rsync $optsyc -e "ssh $optssh" $src $dst #calculate total seconds between start and end. endo=`date +%s` diff=`expr $endo - $start` #write end time/date to logfile echo "`date +%Y-%m-%d_%H:%M:%S` : Finished rsync" echo "Elapsed time = $diff seconds" |
少しくどい感じもしますが、これでしばらく運用してみて、情報の過不足を調整したいと思います。
ページ : 1 2