備忘録にサイトの自動バックアップスクリプト
仕様はローカルにファイルを保持せずAWSのS3に
ファイルをすべて転送し世代管理するもの。

#!/bin/bash
#set -ue
set -u
 
siteName='blog'
siteRoot='/home/blog/'
siteRootDir='public_html'
 
mysqlDB='blog'
mysqlUser='root'
mysqlPass='********'
 
s3BucketName='lalcs'
s3ConfigFile='/root/.s3cfg'
 
backupDir='/tmp/'
saveDate='30'
 
saveLocal='no'
 
# ---------- Start Message ----------
echo 'Start Backup...'
 
# ---------- Make Date ----------
nowDate=`date +%Y%m%d`
delDate=`date +%Y%m%d --date "${saveDate} days ago"`
 
# ---------- S3 Check Upload ----------
s3cmd -c $s3ConfigFile ls s3://$s3BucketName/ | grep ${nowDate}_${siteName}.tar.gz > /dev/null 2>&1
flagUpload=$?
 
# ---------- S3 Check Delete ----------
s3cmd -c $s3ConfigFile ls s3://$s3BucketName/ | grep ${delDate}_${siteName}.tar.gz > /dev/null 2>&1
flagDelete=$?
 
# ---------- S3 Check ----------
if [ $flagUpload -eq 0 ]; then
    echo 'ERROR: Backup file exists.'
    echo 'FINISH!!'
    exit 1
fi
 
# ---------- Move Dir ----------
cd $backupDir
 
# ---------- Backup ----------
if [ ! -e "${nowDate}_${siteName}.tar.gz" ]; then
    # Make Dir
    mkdir "${nowDate}_${siteName}"
    # DB Dump
    mysqldump --user=$mysqlUser --password=$mysqlPass $mysqlDB | gzip > "${nowDate}_${siteName}/mysql_dump.gz"
    # Site Backup
    tar zcf "${nowDate}_${siteName}/${siteRootDir}.tar.gz" -C $siteRoot $siteRootDir
    # ALL gzip
    tar zcf "${nowDate}_${siteName}.tar.gz" "${nowDate}_${siteName}"
    # Remove Dir
    rm -rf "${nowDate}_${siteName}"
 
    echo 'Backup Complete!'
fi
 
#---------- File Delete ----------
if [ -e "${delDate}_${siteName}.tar.gz" ]; then
    rm -f "${delDate}_${siteName}.tar.gz"
    echo 'File Delete Complete!'
fi
 
# ---------- S3 Upload ----------
if [ $flagUpload -eq 1 ]; then
 
    # ---------- Upload ----------
    s3cmd -c $s3ConfigFile put "${nowDate}_${siteName}.tar.gz" s3://$s3BucketName
 
else
    echo 'ERROR: File already exists in S3.'
fi
 
# ---------- S3 Delete ----------
if [ $flagDelete -eq 0 ]; then
 
    # ---------- Delete ----------
    s3cmd -c $s3ConfigFile del s3://$s3BucketName/"${delDate}_${siteName}.tar.gz"
 
else
    echo 'ERROR: There is no file is being deleted in S3.'
fi
 
# ---------- Remove Local File ----------
if [ $saveLocal = 'no' ]; then
    rm -f "${nowDate}_${siteName}.tar.gz"
fi
 
echo 'FINISH!!'
exit 0

Cronで使ってみると起動しなかったので修正。