cronで自動バックアップ
cronを使って、特定のディレクトリのバックアップとDBのバックアップ取得を行いました。
そもそもcronとは何か?
cron とは、ジョブ(スクリプト)を自動実行するためのデーモンプロセスです。
そして、Linuxサーバーの管理を行なう場合、ログのローテーションや、バックアップなど、定期的に自動実行したいジョブが数多くあります。
特に、バックアップなどは、システムへの負荷が大きいため、通常は、ユーザからのアクセスが少ない、深夜や早朝に行なわれます。
このように、定期的に実行されるジョブは、crond というデーモンによって、自動的に行なうように管理することができます。
cronを使ってバックアップを取ってみよう
バックアップ用のスクリプトをcronで動かすにはどうすればいいか、実際の例を見て行きましょう。
バックアップ用スクリプトの作成
このスクリプトでは週1回の頻度で、12世代(12週間分)のバックアップを取得します。
- file_backup.sh
#!/bin/bash
PATH=/usr/local/sbin:/usr/bin:/bin
# バックアップ先
BACKUP_DIR=/var/sites/bacchi.me/backup/
# バックアップ対象
TARGET_DIR=/var/sites/bacchi.me/html
# バックアップ後のファイル名
BACKUP_FILE_NAME=bacchi.me-`/bin/date +%Y%m%d`.tar.gz
# 今日の日付
DATE=`/bin/date \'+%Y%m%d\'`
# 削除する日付
touch -m -d \'(`/bin/date -d \'-12 week\' +%Y%m%d`)\' /tmp/wpbk
# バックアップ処理
cd $TARGET_DIR
tar czfp $BACKUP_FILE_NAME ./
mv $BACKUP_FILE_NAME $BACKUP_DIR
# 古いバックアップを削除
find $BACKUP_DIR -not -newer /tmp/wpbk -name "*tar.gz" | rm -f
- 補足
- 削除する日付の「-d '-12 week'」を「-d '-7 day'」とすると7日、「-d '-3 month'」とすると3ヶ月といった具合に調整できます。
cronの設定
上で作ったスクリプトをcronで自動実行してもらいます。
設定方法はcrontabコマンドを使う方法と、
/var/spool/cron/ユーザー名 ファイルを編集する方法の
2通りありますが、記述する設定は同じ内容です。
下記のようなコマンドを実行します。
* crontab コマンドで設定を行う
## cronを設定したいユーザーでログインしている状態で
$ crontab -e
## 任意のユーザーのcronを設定する場合
# crontab -u [username] -e
- /var/spool/cron/ユーザー名 のファイルを編集する
vi /var/spool/cron/[username]
上記のどちらを実行しても、viで設定内容を記述します。
今回の例では毎週月曜日の朝5時30分にジョブを走らせます。
設定内容は下記の通り
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * command to be executedu
30 5 * * 1 /bin/bash file_backup.sh 2>&1 >/dev/null
これを見ていただいたらわかると思いますが、
分・時・日・月・週 処理内容
の形で記述しています。
最後に
ここで紹介できなかったcronの設定方法や各種スクリプトについてまた紹介できればと思います。