会社で使ってるプロジェクト管理ツールのRedMineのバックアップを全然やってなかったので、さすがにそろそろバックアップしとくかということで、シェルスクリプトを書いた。あんまりシェルスクリプト書かないので、こういう書き方が正しいのかはわからないが、一応動いているので、メモとして残しておく。ちなみに、運用として、日付でバックアップしていくとどんどん増殖していくので、7日分もあれば十分だろうと思われるので、曜日で管理する。また、ファイルサイズも大したことなかったので、非圧縮である。
まずは、シェルスクリプトを書く。
vi redmine-backup.sh
#!/bin/bash #Apacheの停止 service httpd stop > /dev/null # RedMineのファイルディレクトリを指定 ATTATCHDIR=/path/to/files # バックアップ先ディレクトリを指定 BACKDIR=/path/to/backup # MySQLrootパスワード ROOTPASS=******** # 曜日を取得 int_youbi=`date +%w` case "$int_youbi" in # 日曜日 0) youbi="sun" ;; # 月曜日 1) youbi="mon" ;; # 火曜日 2) youbi="tue" ;; # 水曜日 3) youbi="wed" ;; # 木曜日 4) youbi="thu" ;; # 金曜日 5) youbi="fri" ;; # 土曜日 6) youbi="sut" ;; esac # MySQLのredmineデータベースのバックアップ mysqldump -u root -p$ROOTPASS redmine > $BACKDIR"/redmine_"$youbi".dump" # RedMineのファイルディレクトリのバックアップ rsync -a $ATTACHDIR $BACKDIR > /dev/null # ファイルの持ち主をWinSCP接続するユーザに変更 chown -R hoge. $BACKDIR # Apacheの起動 service httpd start
これで、RedMineのバックアップを取るシェルスクリプトが出来た。
次に、rootのみの権限に変更した。
chmod 700 redmine-backup.sh
これを、cronに登録する。
echo "0 5 * * * root /root/redmine-backup.sh" > /etc/cron.d/backup
ここからWindows側の作業。
さきほどのシェルスクリプトで保存したデータをWindows側に自動に保存する。
通信方法はSSH。SSHクライアントとしてWinSCPを使う。
参考情報はこちら:WinScpをWindowsバッチで自動的に動かす方法
まずは、バッチファイルを作成する。ファイル名は、redmine.batとでもする。
ユーザ名とホスト名は、事前にWinSCP側に登録しておくこと。
/scriptで指定するファイルに、WinSCPに行わせる作業を記述する。
"C:\Program Files\WinSCP\WinSCP.exe" username@hostname /console /script=.\redmine.scr
次に、redmine.scrを記述する。
バッチ処理なので、上書き確認などはしないようにする。
バックアップ先は、E:\backup\redmineとする。
option batch on option confirm off option transfer binary cd /path/to/backup/ lcd "E:\backup\redmine" get -preservetime * .\ close exit
redmine.batを実行してみて、ちゃんとダウンロードできたか確認する。
バックアップがダウンロードできているようだったら、
コントロールパネル > タスク > スケジュールされたタスクの追加
より、RedMineバックアップ用のタスクを作成する。基本的に1日1回だろうから、システム起動時に自動的にDLさせるようにしておいた。これで、RedMineサーバが故障してもデータの心配はなくなったと思われる。(サーバと俺のPCが同時にお亡くなりになったら終了だが。。。)