Перейти до

Помогите со скриптом


Рекомендованные сообщения

Привет! Помогите пожалуйста со скриптом архивации. Саму базу данных скрипт дампит и складывает ее на selectel, а файлы которые находятся в папке TARGET_DIR="/var/backups" не архивирует и не складывает. 

Помогите пожалуйста. 

 

 Листинг:

 

 




#!/usr/local/bin/bash
#
# Script for do automatic backups files and dbs (mysql)
# to Selectel Cloud Storage (http://selectel.ru/services/cloud-storage/)
#
# version: 1.0
#
# Authors:
# - Konstantin Kapustin <sirkonst@gmail.com>
#

# ------- Settings -------
# Selectel Storage settings
SS_USER="30912" # Storage user
SS_PWD="59y8vfjf" # Storage password
SS_CONTAINER="billing_backups" # Storage container where we put backup files

#Backup settings
TARGET_DIR="/var/backups" # What to backup
BACKUP_NAME="nodeny" # Name for backup, default the last folder name in target
#BACKUP_NAME=`expr match "${TARGET_DIR%%/}" '.*/\(.*\)'`
#BACKUP_NAME=`basename $TARGET_DIR`

BACKUP_DIR="/usr/myfiles/selectel_temp/$BACKUP_NAME" # Where our backup will be placed

EXCLUDE_LIST="\
*~
*.bak
*.tar.gz
*.old
*.log
.git/
.svn/
"
# Mysql backup settings
DB_NAME="bill" # Database name, set __ALL__ for backup all dbs or empty for disable backup
DB_USER="root"
DB_PWD="polebtrp"
DB_HOST="localhost"
DB_PORT="3306"

EMAIL="nsdaq@gmail.com" # Email for send log, set empty if don't want seng log
EMAIL_ONLY_ON_ERROR="yes" # Send a email only if there was something strange (yes:no)

DELETE_LOG="yes" # remove log after complite? (yes:no)
DELETE_BACKUPS_AFTER_UPLOAD="yes" # remove backups files after successful upload to Storage (yes:no)
# How long store backup in the Storage (in days)? If you set 30, uploaded file will be auto removed after 30 days.
STORAGE_EXPIRE=""

# ------- Utils -------
SUPLOAD=`which supload`
MYSQLDUMP=`which mysqldump`
BZIP=`which bzip2`
TAR=`which tar`
SENDMAIL=`which sendmail`

# ------- Checking -------
if [ -z "$SS_USER" ] || [ -z "$SS_PWD" ] || [ -z "$SS_CONTAINER" ]; then
echo "[!] Please set Selectel Storage settings first!"
exit 1
fi

if [ ! -d "$TARGET_DIR" ]; then
echo "[!] Backup's target doesn't exist $TARGET_DIR!"
exit 1
fi

if [ ! -d "$BACKUP_DIR" ]; then
mkdir "$BACKUP_DIR"
if [ $? -ne 0 ]; then
echo "[!] Can not create backup dir $BACKUP_DIR!"
exit 1
fi
fi

if [ -n "$EMAIL" ] && [ -z "$SENDMAIL" ]; then
echo "[!] sendmail is not installed!"
exit 1
fi

if [ -n "$STORAGE_EXPIRE" ]; then
if [ "$STORAGE_EXPIRE" -eq "$STORAGE_EXPIRE" ] 2>/dev/null; then
:
else
echo "[!] STORAGE_EXPIRE must be a positive integer!"
exit 1
fi
fi

# ------- Preparation -------
TIMESTAMP=$(date +%Y-%m-%d_%Hh%Mm)
BACKUP_FILENAME="${BACKUP_NAME}_$TIMESTAMP.tar.bz2"
LOG_FILE="$BACKUP_DIR/log_$BACKUP_NAME-$TIMESTAMP.log"
declare -a _for_upload

if [ x"$DB_NAME" = "x__ALL__" ]; then
DB_BACKUP_FILENAME="mysql_${BACKUP_NAME}_ALL_$TIMESTAMP.sql"
DB_NAME=""
else
if [ -z "$DB_NAME" ]; then
DB_BACKUP_FILENAME=""
else
DB_BACKUP_FILENAME="mysql_${BACKUP_NAME}_${DB_NAME}_$TIMESTAMP.sql"
fi
fi

if [ -n "$DB_BACKUP_FILENAME" ] && [ -z "$MYSQLDUMP" ]; then
echo "[!] mysqldump is not installed!"
exit 1
fi

# detect interective mode
if [[ -t 1 ]]; then
IM="1"
else
IM="0"
fi

set -o pipefail
_log() {
while read line; do
if [ x"$IM" == x"1" ]; then
echo "$line" | tee -a "$LOG_FILE"
else
echo "$line" >> "$LOG_FILE"
fi
done
}

_error="0"

echo "$(date +%H:%M:%S) Begin backup $BACKUP_NAME" | _log

# ------- Backup files -------
echo "$(date +%H:%M:%S) Archiving files $TARGET_DIR" | _log
tar_exc=""
for line in ${EXCLUDE_LIST}; do
tar_exc="$tar_exc --exclude '$line'"
done
cd "$TARGET_DIR/.."
#target=`expr match "${TARGET_DIR%%/}" '.*/\(.*\)'`
target=`basename $TARGET_DIR`

$TAR cjpf "$BACKUP_DIR/$BACKUP_FILENAME" ${tar_exc} "$_target" > /dev/null 2>&1 | _log

files_size=$(du -h "$BACKUP_DIR/$BACKUP_FILENAME" | cut -f1)
echo "$(date +%H:%M:%S) Files backup put to $BACKUP_DIR/$BACKUP_FILENAME ($files_size)" | _log

_for_upload=( "${_for_upload[@]}" "$BACKUP_DIR/$BACKUP_FILENAME")

# ------- Backup Mysql -------
if [ -n "$DB_BACKUP_FILENAME" ]; then
# Create MySQL database dump
echo "$(date +%H:%M:%S) Creating DB dump for ${DB_NAME:-ALL dbs}" | _log

$MYSQLDUMP --opt -u "$DB_USER" -p"$DB_PWD" -h "$DB_HOST" -P "$DB_PORT" "${DB_NAME:---all-databases}" > "$BACKUP_DIR/$DB_BACKUP_FILENAME"
$BZIP -9 --force "$BACKUP_DIR/$DB_BACKUP_FILENAME"
DB_BACKUP_FILENAME="$DB_BACKUP_FILENAME.bz2"

db_size=$(du -h "$BACKUP_DIR/$DB_BACKUP_FILENAME" | cut -f1)
echo "$(date +%H:%M:%S) Database backup put to $BACKUP_DIR/$DB_BACKUP_FILENAME ($db_size)" | _log

_for_upload=( "${_for_upload[@]}" "$BACKUP_DIR/$DB_BACKUP_FILENAME")
fi

# ------- Upload backups -------
echo "$(date +%H:%M:%S) Uploading backup files to Selectel Storage..." | _log

for _file in "${_for_upload[@]}"; do
_u_opts=""
if [ -n "$STORAGE_EXPIRE" ]; then
_u_opts="-d ${STORAGE_EXPIRE}d"
fi
$SUPLOAD -u "$SS_USER" -k "$SS_PWD" $_u_opts "$SS_CONTAINER" "$_file" | _log
if [ $? -ne 0 ]; then
_error="1"
else
if [ x"$DELETE_BACKUPS_AFTER_UPLOAD" = x"yes" ]; then
rm -f "$_file"
echo "$(date +%H:%M:%S) File $_file was removed" | _log
fi
fi
done

# ------- Clearing and notification -------
if [ x"$_error" = x"0" ]; then
echo "$(date +%H:%M:%S) Backup complete, have a nice day!" | _log
_title="[Backup log] $BACKUP_NAME ($TIMESTAMP)"
else
echo "$(date +%H:%M:%S) Backup complete with errors, see log $LOG_FILE." | _log
_title="[Backup log - !ERRORS!] $BACKUP_NAME ($TIMESTAMP)"
fi

if [ -n "$SENDMAIL" ] && [ -n "$EMAIL" ]; then
if [ x"$_error" = x"0" ] && [ x"$EMAIL_ONLY_ON_ERROR" = x"yes" ]; then
:
else
cat - "$LOG_FILE" << EOF | $SENDMAIL -t
To:$EMAIL
Subject:$_title

EOF
fi
fi

if [ x"$DELETE_LOG" = x"yes" ] && [ x"$_error" = x"0" ]; then
rm -f "$LOG_FILE" # Delete log file
fi



 

 

Ссылка на сообщение
Поделиться на других сайтах

Вот тут используется переменная $_target, которая нигде не определена, выше определена только $target

$TAR cjpf "$BACKUP_DIR/$BACKUP_FILENAME" ${tar_exc} "$_target" > /dev/null 2>&1 | _log
 
Ссылка на сообщение
Поделиться на других сайтах
Опубліковано: (відредаговано)

Супер! Спасибо большое, я и не заметил. +1

Кстати скрипт селектела, и о ошибке ни слова от них.

Відредаговано NETOS
Ссылка на сообщение
Поделиться на других сайтах
Опубліковано: (відредаговано)

Не знаю... как то ближе, и не в Украине и не далеко за рубежом + на русском все.

Відредаговано NETOS
Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Вхід

Уже зарегистрированы? Войдите здесь.

Войти сейчас
  • Зараз на сторінці   0 користувачів

    Немає користувачів, що переглядають цю сторінку.

×
×
  • Створити нове...