シェルスクリプトとCronでファイルを自動バックアップ&ローテーション
「シェルスクリプトとCronでデータベースを自動バックアップ&ローテーション」に引き続き、今回は、ファイルの自動バックアップ&ローテーションを行うシェルスクリプトを紹介します。
ページ下部のようなシェルスクリプトを文字エンコーディングをEUC-JP、改行コードをLFで作成し、外部からアクセスできない場所に転送します。例ではシェルスクリプトを/virtual/ユーザー名/sh/ディレクトリに作成し、バックアップ先を/virtual/ユーザー名/backup/files/ディレクトリとしています。
あとは、Cronにこのシェルスクリプトを登録し、1日に1回だけ実行されるように設定するだけです。
シェルスクリプトが実行されるたびに、指定したディレクトリにファイルを圧縮したtar.gzファイルが蓄積されていきます。「bk_days」で指定した日数分を超えると、自動的に古いバックアップファイルから削除されていきます。
バックアップはサーバー内に蓄積されていくので、定期的にローカルコンピューターにダウンロードしたり、別のサーバーにサーバー間コピーでバックアップのバックアップを作成するようにしましょう。サーバー自体に問題が発生した場合には、バックアップの意味がなくなってしまいます(経験済み)。
Coreserver以外のサーバーでも、大半のサーバーではディレクトリ名を変えるだけでそのまま使えると思います。
- /virtual/ユーザー名/sh/backup_file.sh
#!/bin/sh # ---------- 設定 ---------- # バックアップ元のディレクトリ src_dir=/virtual/ユーザー名/public_html/ドメイン名/ # バックアップ先のディレクトリ・ファイル bk_dir=/virtual/ユーザー名/backup/files/ bk_file=バックアップファイル名 # 保存する日数 bk_days=90 # ---------- ファイル名を設定 ---------- # タイムスタンプを取得 ts_now=`date +%Y%m%d` ts_old=`date "-d$bk_days days ago" +%Y%m%d` # ファイル名を設定 file_backup=$bk_file.$ts_now.tar.gz file_remove=$bk_file.$ts_old.tar.gz # ---------- バックアップ処理 ---------- # バックアップ元のディレクトリに移動 cd $src_dir if [ $? != 0 ]; then echo "Source directory does not exist." exit 1 fi # アーカイブを作成 tar cfz $bk_dir$file_backup * .htaccess if [ $? != 0 -o ! -e $bk_dir$file_backup ]; then echo "Cannot archive file." exit 1 fi # バックアップ先のディレクトリに移動 cd $bk_dir if [ $? != 0 ]; then echo "Backup directory does not exist." exit 1 fi # ローテーション処理 if [ -e $file_remove ]; then rm -f $file_remove fi exit 0
コメント (6)
はじめまして、こんにちは。
[ -e hoge ] で「hogeというファイルが存在したら真」になります。
この場合だと「古いバックアップファイルが存在したら削除する」処理をしています。
[ ] は test コマンドの省略記法なので「test -e hoge」でも同じです。
「man test」すると使えるオプションが確認できるかと思います。
こんにちは。
さっそくのご回答ありがとうございました。
man testで-eについて確認ができました。
ありがとうございました。
初めまして。Tと申します。
tar cfz $bk_dir$file_backup * .htaccess
アーカイブ作成の.htaccessはどういう意味なのでしょうか?
どこかに.htaccessを設定して制御するということでしょうか?
よろしくお願いします。
はじめまして。
バックアップ対象のトップディレクトリに .htaccess ファイルがあった場合、
tar cfz $bk_dir$file_backup *
だと、.htaccess ファイルがバックアップされないので
tar cfz $bk_dir$file_backup * .htaccess
のようにして、単にバックアップに含めるファイル ( .htaccess ) を指定しているだけですね。
他にもトップディレクトリにドットファイルがある場合は、
tar cfz $bk_dir$file_backup * .htaccess .htpasswd
のように個別に指定が必要になります。
早速ご回答いただき、ありがとうございました。
勉強させていただきました。
トラックバック (1)
[…] シェルスクリプトとCronでファイルを自動バックアップ&ローテーション https://dxd8.com/archives/169/ […]
はじめまして
シェルスクリプトを勉強しようとこちらにたどりつきました。宜しくお願いいたします。
ローテーションの処理において、if [ -e $file_remove ];
とありますが、こちらの -e について こちらのいみについてご教示いただけると幸いです。
宜しくお願いいたします。