WindowsでもBashを使う!Bash On Ubuntu On Windowsのrsyncを使って自動バックアップ!Slackとの連携も♫

以前、下記のエントリーで複数のPCをMac miniに集約しました。
xblood.hatenablog.com

この時に、自動バックアップをBunBackUpからrsyncスクリプト
移行したので、エントリーを残しておきます。

何故ツールを移行したのか。

BunBackUpはWindowsで使える便利で強力なバックアップツールです。
nagatsuki.la.coocan.jp
ですが、最近はMacで開発することが多く、
いつMacに乗り換えるか分からないような状況です。
なので、WindowsでもMacでもLinuxでも動くバックアップツールを作ることが
今回の目的です。

rsyncは古くからある強力なLinuxコマンド

ノウハウも多く検索すればたくさん情報が出てきます。
以前Macでバックアップしていた時もrsync使ってました。

役に立った「Bash On Ubuntu On Windows

Windows 10にはAnniversary Updateで「Bash On Ubuntu On Windows」が導入できます。
これは、Windows環境下でBash環境を実現するための公式ツールになります。
今回は、「Bash On Ubuntu On Windows」を使って、rsyncコマンドによる自動バックアップを構築します。
※なんかいい略し方ないですかね・・BOUOWだと分かりづらい気がする。


それでは、やっていきます。
そんな難しいことはしていないです。
要するにBash自動起動する仕組みを作るだけです。

バッチファイルでBashを起動する。

Bash.exeは下記ディレクトリにあります。

C:\Windows\System32\

Bash.exeの場所が特定できれば簡単です。Bashを起動するバッチファイルを作ります。
↓以下コマンド例

cmd /c ""C:\Windows\System32\bash.exe" --login -i -- /mnt/c/rsync_scripts/runRsyncBackup.sh"
バッチファイルをタスクスケジューラーから呼び出す。

Windowsにはタスクスケジューラーが用意されているので今回はこれを使います。
f:id:yasay:20161130223150p:plain
毎日1時間毎に処理を実行します。
スクリプトは成功ファイルを生成して、当日に一度でも処理が成功すれば
空振りするように仕組みます。


Slackと連携する。

成功メッセージをSlackに送信して通知するようにします。
方法はいろいろありますが、今回は「Incoming Webhooks」を使って実現します。
api.slack.com
Slack連携用スクリプトにメッセージを送ってあげるだけ。

echo "Successful backup process with rsync script.
Log File Name : ${fileName}
Success File Name(=Date) : ${successFileName}
Mount Status : e=${e}, g=${g}, h=${h}, z=${z}" | bash sendResultToSlack.sh

メッセージの送信に成功しました!↓↓
f:id:yasay:20161130223210p:plain

GitHubスクリプトファイルを置きました。

具体的な処理内容については、GitHubを参照してみてください。
github.com
いけてないコードのプルリク歓迎です。


これでバックアップの仕組みが構築できたので一安心です。
大事な家族の写真も自動的にバックアップされます。

もしこの記事を見て実践したいのでしたら、
rsyncコマンドの間違いにはくれぐれも注意してください。
大事なファイルを失う可能性があります。

"--dry-run"を実行してバックアッププレビューを行い、
何度も正しいか確認してから、rsyncコマンドを実行することを
おすすめします。


今後は下記のような改善をしていきたいです。

  • Successファイルの自動削除
  • 前回のバックアップから1週間以上経過している場合に、Slackにメッセージを送信


■参考情報とか
【シェル芸人への道】Bash on Windowsを探検する - Qiita
[10分で出来る]シェルスクリプトの結果をslackに投稿 - Qiita
dateコマンドでバックアップファイル作成時にファイル名に日付_時間を付ける (LinuxとWindows用) - Qiita
rsyncの使い方 | server-memo.net
windows環境の git で改行コードの自動変換に注意 - Qiita