From 8a4471adb545765fe6294d08104003e1e5ba3f10 Mon Sep 17 00:00:00 2001 From: Llloooggg Date: Thu, 15 Oct 2020 12:14:35 +0300 Subject: [PATCH] init --- backup.py | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 backup.py diff --git a/backup.py b/backup.py new file mode 100644 index 0000000..1d03c59 --- /dev/null +++ b/backup.py @@ -0,0 +1,76 @@ +#!/usr/bin/env python3 + +from datetime import datetime +from subprocess import call +from shutil import rmtree +from os import scandir, makedirs, remove, rename + +path_to_backups = "/mnt/bank/backups/" + +dateFormat = "%H-%M-%S--%d-%m-%Y" + +all_objs = [] +with scandir(path_to_backups) as dir_objs: + for obj in dir_objs: + all_objs.append(obj) + +date_dirs = [] +for obj in all_objs: + if obj.is_dir(): + try: + datetime.strptime(obj.name, dateFormat) + date_dirs.append(obj.name) + except Exception: + pass + +print() +date_dirs.sort(reverse=True) +safe_list = [] +safe_list.append("sync.log") +if len(date_dirs) > 1: + cur_backup = date_dirs[0] + old_backup = date_dirs[1] + safe_list.append(cur_backup) +elif len(date_dirs) == 1: + if date_dirs[0] != "00-00-00--01-01-0001": + makedirs(path_to_backups + "00-00-00--01-01-0001") + cur_backup = date_dirs[0] + safe_list.append(cur_backup) + old_backup = "00-00-00--01-01-0001" +else: + makedirs(path_to_backups + "00-00-00--01-01-0001") + old_backup = "00-00-00--01-01-0001" + +safe_list.append(old_backup) + + +for obj in all_objs: + if obj.name not in safe_list: + if obj.is_dir(): + rmtree(path_to_backups + obj.name) + else: + remove(path_to_backups + obj.name) + + +new = datetime.now().strftime(dateFormat) + + +sync = call( + f"rsync -aAXv / --exclude={{'/dev/*','/proc/*','/sys/*','/tmp/*','/run/*','/mnt/*','/media/*','/lost+found'}} {path_to_backups}{old_backup} --delete", + shell=True, +) + +if sync == 0: + header = "SUCCESS" + message = f"Sync at {new} to {old_backup} successful completed" + + rename(path_to_backups + old_backup, path_to_backups + new) + +else: + header = "ERROR" + message = f"Sync at {new} to {old_backup} crashed" + + +with open(f"{path_to_backups}sync.log", "a") as f: + f.write(datetime.now().strftime("[%X] ") + header + "\n") + f.write(message + "\n")