Николаев Виталий
Блог веб-разработчика: Битрикс, PHP, Python, Linux и SEO
Python Python
30.05.2017

Python удаляем старые бэкапы

Со временем папка с резервными копиями может сильно разрастись и занять все свободное место на диске.

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

Чтобы этого избежать, можно автоматически удалять старые резервные копии через Python-скрипт.

Удаление старых бэкапов в Python

Ниже пример скрипта, который удаляет папки с бэкапами старше указанного количества дней.

import shutil
from os import listdir
from os.path import isdir, join
from datetime import timedelta, datetime
import os.path

# Директория с бэкапами
directory = r'//192.168.0.26/backup/1C-backup/'

# Срок хранения бэкапов
days = timedelta(days=60)

# Получаем список директорий
only_directory = [
    f for f in listdir(directory)
    if isdir(join(directory, f))
]

# Перебираем папки
for folder in only_directory:

    p = [x for x in listdir(directory + folder)]

    for path in p:

        # Определяем возраст папки
        how_long_ago_creation_date = (
            datetime.now() -
            datetime.fromtimestamp(
                os.path.getctime(directory + folder + '/' + path)
            )
        )

        print(path + " created " +
              str(how_long_ago_creation_date) + " ago")

        # Если папка старше указанного срока
        if how_long_ago_creation_date > days:

            print("Delete folder: " +
                  directory + folder + '/' + path)

            # Удаляем папку
            try:

                shutil.rmtree(
                    os.path.join(
                        os.path.abspath(
                            os.path.dirname(__file__)
                        ),
                        directory + folder + '/' + path
                    )
                )

            except OSError:

                print('Не удалось удалить папку')

Как работает скрипт

  • listdir() — получает список файлов и папок;
  • getctime() — получает дату создания;
  • timedelta(days=60) — задает срок хранения;
  • shutil.rmtree() — удаляет папку полностью.

Настройка срока хранения

Изменить срок хранения бэкапов можно здесь:

days = timedelta(days=60)

Например:

  • 30 — хранить месяц;
  • 90 — хранить три месяца;
  • 7 — хранить неделю.

Что делает try/except

Иногда удалить папку не получается:

  • файл занят процессом;
  • нет прав доступа;
  • сетевой ресурс недоступен.

Поэтому используется обработка исключений:

try:
    ...
except OSError:
    print('Не удалось удалить папку')

Где может пригодиться

  • серверы 1С;
  • автоматические резервные копии;
  • NAS и сетевые хранилища;
  • Linux и Windows-серверы;
  • очистка старых архивов.

Итог

Автоматическая очистка старых бэкапов помогает избежать переполнения диска и проблем с созданием новых резервных копий.

Такой Python-скрипт удобно запускать по cron или через планировщик задач Windows.

16 просмотров

Комментарии

Где заказы?
Почему у одних компаний очередь из клиентов, а у других пустой сайт и тишина?
Телеграм канал «Где заказы?» — про продажи, сайты и ошибки бизнеса на реальных примерах. Подписаться