diff --git a/Dockerfile b/Dockerfile index a07ec3c..a8f40fc 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM mongo:3.0 +FROM mongo:3.0.11 MAINTAINER Ilya Stepanov RUN apt-get update && \ diff --git a/README.md b/README.md index 262c235..6f594b2 100644 --- a/README.md +++ b/README.md @@ -19,3 +19,15 @@ To run backup once without cron job, add `no-cron` parameter: -v /path/to/target/folder:/backup \ # where to put backups --link my-mongo-container:mongo \ # linked container with running mongo istepanov/mongodump no-cron + +To backup only one database, set environment variable `MONGO_DB_NAME` + + docker run -d \ + -v /path/to/target/folder:/backup \ # where to put backups + -e 'CRON_SCHEDULE=0 1 * * *' \ # cron job schedule + -e 'MONGO_DB_NAME=' \ # set database name + --link my-mongo-container:mongo \ # linked container with running mongo + istepanov/mongodump + +By default, backups available for last 30 days only. To manage it, set environment +variable `MONGO_BACKUP_EXPIRE_DAYS` diff --git a/backup.sh b/backup.sh index f24f578..659509c 100644 --- a/backup.sh +++ b/backup.sh @@ -7,8 +7,30 @@ echo "Job started: $(date)" DATE=$(date +%Y%m%d_%H%M%S) FILE="/backup/backup-$DATE.tar.gz" -mongodump --quiet -h $MONGO_PORT_27017_TCP_ADDR -p $MONGO_PORT_27017_TCP_PORT +arr=("--quiet" "-h" "$MONGO_PORT_27017_TCP_ADDR" "-p" "$MONGO_PORT_27017_TCP_PORT") +if [ ! -z $MONGO_DB_NAME ]; then + arr+=("-d") + arr+=("$MONGO_DB_NAME") +fi +mongodump "${arr[@]}" tar -zcvf $FILE dump/ rm -rf dump/ - echo "Job finished: $(date)" +echo "Start autoclean" +FILES=/backup/*.tar.gz +currtime=`date +%s` +for f in $FILES +do + if [ -f $f ]; + then + filemtime=`stat -c %Y $f` + diff=$(( (currtime - filemtime)/86400)) + if (($diff > $MONGO_BACKUP_EXPIRE_DAYS)); + then + echo "deleting '$f' ..." + rm $f + echo "deleted." + fi + fi +done +echo "End autoclean" diff --git a/start.sh b/start.sh index 34cf936..3b98aec 100644 --- a/start.sh +++ b/start.sh @@ -3,7 +3,7 @@ set -e CRON_SCHEDULE=${CRON_SCHEDULE:-0 1 * * *} - +MONGO_BACKUP_EXPIRE_DAYS=${MONGO_BACKUP_EXPIRE_DAYS:-30} if [[ "$1" == 'no-cron' ]]; then exec /backup.sh else @@ -13,6 +13,9 @@ else fi CRON_ENV="MONGO_PORT_27017_TCP_ADDR='$MONGO_PORT_27017_TCP_ADDR'" CRON_ENV="$CRON_ENV\nMONGO_PORT_27017_TCP_PORT='$MONGO_PORT_27017_TCP_PORT'" + CRON_ENV="$CRON_ENV\nMONGO_DB_NAME='$MONGO_DB_NAME'" + CRON_ENV="$CRON_ENV\nMONGO_BACKUP_EXPIRE_DAYS=$MONGO_BACKUP_EXPIRE_DAYS" + CRON_ENV="$CRON_ENV\nTZ=$TZ" echo -e "$CRON_ENV\n$CRON_SCHEDULE /backup.sh > $LOGFIFO 2>&1" | crontab - crontab -l cron