Я хочу создать сценарий резервного копирования, который .tar.gz
папки, которую я определяю, скажем, fx /root/tekkit/world
это .tar.gz
Затем файл должен быть загружен на FTP-сервер, получив имя по времени его загрузки, например: 07-10-2012-13-00.tar.gz
Как написать такой сценарий резервного копирования?
Я уже понял .tar.gz
часть - просто нужно назвать и загрузить на FTP.
Я знаю, что FTP - не самый безопасный способ сделать это, но поскольку это не конфиденциальные данные, а FTP - единственный вариант, который у меня есть, он подойдет.
В итоге я получил такой сценарий:
#!/bin/bash
# have some path predefined for backup unless one is provided as first argument
BACKUP_DIR="/root/tekkit/world/"
TMP_DIR="/tmp/tekkitbackup/"
FINISH_DIR="/tmp/tekkitfinished/"
# construct name for our archive
TIME=$(date +%d-%m-%Y-%H-%M)
if [ $1 ]; then
BACKUP_DIR="$1"
fi
echo "Backing up dir ... $BACKUP_DIR"
mkdir $TMP_DIR
cp -R $BACKUP_DIR $TMP_DIR
cd $FINISH_DIR
tar czvfp tekkit-$TIME.tar.gz -C $TMP_DIR .
# create upload script for lftp
cat <<EOF> lftp.upload.script
open server
user user password
lcd $FINISH_DIR
mput tekkit-$TIME.tar.gz
exit
EOF
# start backup using lftp and script we created; if all went well print simple message and clean up
lftp -f lftp.upload.script && ( echo Upload successfull ; rm lftp.upload.script )
Сначала вы создаете задание cron, которое вызывается в то время, когда вы хотите создать резервную копию, после создания резервной копии. Сценарий генерирует lftp-скрипт для загрузки файла через FTP.
#!/bin/bash
# have some path predefined for backup unless one is provided as first argument
BACKUP_DIR="/tmp/test"
# construct name for our archive
TIME=$(date +%d-%m-%Y-%H-%M)
if [ $1 ]; then
BACKUP_DIR="$1"
fi
echo "Backing up dir ... $BACKUP_DIR"
tar czvfp $TIME.tar.gz $BACKUP_DIR
# create upload script for lftp
cat <<EOF> lftp.upload.script
open ftp.server.tld
user username password
cd /target/directory
lcd /local/dir/where/tar/gz/archive/is
mput $TIME.tar.gz
exit
EOF
# start backup using lftp and script we created; if all went well print simple message and clean up
lftp -f lftp.upload.script && ( echo Upload successfull ; rm lftp.upload.script )
Так просто как:
DATE=`date +%d-%m-%Y-%H-%M`
tar cfz ${DATE}.tar.gz /root/tekkit/world
Или, меньше набирая:
tar cfz $(date +%d-%m-%Y-%H-%M).tar.gz /root/tekkit/world
Что случается?
$ DATE=`date +%d-%m-%Y-%H-%M`
$ echo $DATE
07-10-2012-13-15