schedule2020-03-10

ディレクトリのバックアップスクリプト

ディレクトリのバックアップスクリプトを作成したのでメモ。

環境

  • CentOS 6.6

同じ処理をCentOS 7でも実行可能です。

ディレクトリのバックアップ

要件として以下を想定した

  • 対象のディレクトリを圧縮してバックアップを取る
  • 1週間分のバックアップを保存する(同時に古いものを削除する)
  • 毎日実行する
# バックアップ先のディレクトリ
backupdir='/path/to/backupdir'

# 古いものを削除する
find $backupdir -type f -daystart -mtime +6 |xargs /bin/rm -f

# バックアップするディレクトリ
targetdir='/path/to/target_dir'

# ファイル名を定義
filename='backup.tar.gz'
cDateTime=`date '+%Y%m%d_%H%M%S'`

# backup実行
tar -zcf $backupdir/$filename$cDateTime $targetdir

これでバックアップファイル/path/to/backupdir/backup.tar.gz20200310_121112が作成できる。

findで過去のファイルを検索して|xargs /bin/rm -fで削除している。 -daystart -mtime +6のオプションが、過去から7日前までのファイルを検索する。 +nの場合は過去から(n+1)日前までの期間となるので注意。 0時が基準です。 保存期間の変更する場合は参考が詳しい。

tar -zcfでtarで固めてgzipで圧縮している。 テストの際はオプションvを付けると処理したファイルが確認できます。

crontabで定期実行する

先ほど作成したスクリプトbackup.shcrontabに登録します。 下は毎朝5時に実行する例。

# crontab -l
0 5 * * *  sh /path/to/backup.sh

crontab -eで編集してcrontab -lで確認できる。

関連

参考