uchill/setup-cron-backup.sh

80 lines
3.1 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# Скрипт для настройки автоматического бэкапа БД через cron
# Запускается дважды в день: в 00:00 и 12:00
set -e
SCRIPT_DIR="/var/www/platform/prod"
BACKUP_SCRIPT="$SCRIPT_DIR/backup-db-auto.sh"
CRON_USER="root"
echo "=========================================="
echo "Настройка автоматического бэкапа БД"
echo "=========================================="
echo ""
# Проверить, что скрипт существует
if [ ! -f "$BACKUP_SCRIPT" ]; then
echo "Ошибка: Скрипт $BACKUP_SCRIPT не найден!"
exit 1
fi
# Сделать скрипт исполняемым
chmod +x "$BACKUP_SCRIPT"
echo "✓ Скрипт сделан исполняемым"
# Создать директорию для бэкапов
mkdir -p "$SCRIPT_DIR/backups"
echo "✓ Директория для бэкапов создана"
# Найти путь к docker (для cron)
DOCKER_PATH=$(which docker 2>/dev/null || echo "/usr/bin/docker")
# Проверить, есть ли уже запись в crontab
# Используем PATH с docker и bash для надежности
CRON_CMD="0 0,12 * * * PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin $BACKUP_SCRIPT >> $SCRIPT_DIR/backups/cron.log 2>&1"
if crontab -u "$CRON_USER" -l 2>/dev/null | grep -q "$BACKUP_SCRIPT"; then
echo "⚠️ Запись в crontab уже существует"
echo ""
echo "Текущий crontab:"
crontab -u "$CRON_USER" -l | grep "$BACKUP_SCRIPT"
echo ""
read -p "Заменить существующую запись? (y/N): " -n 1 -r
echo ""
if [[ $REPLY =~ ^[Yy]$ ]]; then
# Удалить старую запись
crontab -u "$CRON_USER" -l 2>/dev/null | grep -v "$BACKUP_SCRIPT" | crontab -u "$CRON_USER" -
# Добавить новую
(crontab -u "$CRON_USER" -l 2>/dev/null; echo "$CRON_CMD") | crontab -u "$CRON_USER" -
echo "✓ Запись в crontab обновлена"
else
echo "Отменено. Существующая запись сохранена."
exit 0
fi
else
# Добавить новую запись
(crontab -u "$CRON_USER" -l 2>/dev/null; echo "$CRON_CMD") | crontab -u "$CRON_USER" -
echo "✓ Запись в crontab добавлена"
fi
echo ""
echo "=========================================="
echo "Настройка завершена!"
echo "=========================================="
echo ""
echo "Расписание бэкапов:"
echo " - Каждый день в 00:00 (полночь)"
echo " - Каждый день в 12:00 (полдень)"
echo ""
echo "Проверить crontab:"
echo " crontab -u $CRON_USER -l"
echo ""
echo "Просмотр логов бэкапов:"
echo " tail -f $SCRIPT_DIR/backups/backup.log"
echo " tail -f $SCRIPT_DIR/backups/cron.log"
echo ""
echo "Удалить автоматический бэкап:"
echo " crontab -u $CRON_USER -l | grep -v '$BACKUP_SCRIPT' | crontab -u $CRON_USER -"