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.
Комментарии