date関数使用
90DayDataBackup.sh
# vi /root/90DayDataBackup.sh #!bin/sh PATH=/usr/local/sbin:/usr/bin:/bin ## ---------------------------------------------------------- NAME="example.com-ファイル90日世代管理" NOW_DATE=`date +%Y%m%d` DATA_PATH="/root/backup/example.com/data/" BACKUP_PATH="/root/backup/example.com/data/${NOW_DATE}" DELETE_DAY=`date -d '90 day ago' +%Y%m%d` ## ---------------------------------------------------------- error () { echo "【Error Backup】${NAME} HOST:`hostname` `hostname -I`" | mail -s "Backup Error ${NAME} HOST:`hostname` `hostname -I`" root exit } success () { echo "【Success Backup】${NAME} HOST:`hostname` `hostname -I`" | mail -s "【Success Backup】${NAME} HOST:`hostname` `hostname -I`" root } # バックアップ関数 backup () { # バックアップディレクトリ作成 mkdir -p ${BACKUP_PATH} # バックアップ /usr/bin/rsync -avvuz --progress -e "ssh -p xxx22 -i /root/.ssh/example.com.ppk" example-user@xxx.yyy.zzz.aaa:/var/www/data/ ${BACKUP_PATH} 1>/dev/null # 90日前のディレクトリを削除 rm -rf ${DATA_PATH}/${DELETE_DAY} } # 変数空チェック if [ -z "${NOW_DATE}" ] || [ -z "${DATA_PATH}" ] || [ -z "${BACKUP_PATH}" ] || [ -z "${DELETE_DAY}" ] ; then error fi # バックアップ実行 backup && { success; exit 0; }
rmコマンドが絡むので面倒でも変数の空判定はしましょう。
実行権限付与と実行
# chmod +x /root/90DayDataBackup.sh # sh /root/90DayDataBackup.sh
CRONに登録
# vi /etc/crontab (略) # 毎日3時10分に日付毎にデータディレクトリを90世代管理バックアップ 10 3 * * * root /usr/bin/sh /root/90DayDataBackup.sh
設定反映
# systemctl restart crond
簡易版
# vi /root/90DayDataBackup.sh #!bin/sh PATH=/usr/local/sbin:/usr/bin:/bin ## ---------------------------------------------------------- NOW_DATE=`date +%Y%m%d` DATA_PATH="/root/backup/example.com/data/" BACKUP_PATH="/root/backup/example.com/data/${NOW_DATE}" DELETE_DAY=`date -d '90 day ago' +%Y%m%d` ## ---------------------------------------------------------- # 変数空チェック if [ -z "${NOW_DATE}" ] || [ -z "${DATA_PATH}" ] || [ -z "${BACKUP_PATH}" ] || [ -z "${DELETE_DAY}" ] ; then echo "Error" echo "BackUP Error `hostname`" | mail -s "Backup Error `hostname`" root exit fi # バックアップディレクトリ作成 mkdir -p ${BACKUP_PATH} # バックアップデータ取得 /usr/bin/rsync -avvuz --progress -e "ssh -p xxx22 -i /root/.ssh/example.com.ppk" example-user@xxx.yyy.zzz.aaa:/var/www/data/ ${BACKUP_PATH} # 90日前のディレクトリを削除 rm -rf ${DATA_PATH}/${DELETE_DAY}