DevOps_Innopolis

Форк
0
/
backupctl.py 
89 строк · 3.3 Кб
1
#!/usr/bin/python3
2

3
import argparse
4
import shutil
5
import os
6
import sys
7
import csv
8
from datetime import datetime
9

10
LOG_FILE = '/home/niki/dz11/journal.csv'
11

12

13
def backup(source_dir, backup_dir, compralg):
14
    """Создание резервной копии всего содержимого директории source"""
15

16
    # Проверить, что обе директории существуют
17
    if not (os.path.isabs(source_dir) and os.path.isdir(source_dir)):
18
        print('Directory %s doesn\'t exitst' % (source_dir))
19
        return
20
    if not (os.path.isabs(backup_dir) and os.path.isdir(backup_dir)):
21
        print('Directory %s doesn\'t exitst' % (backup_dir))
22
        return
23

24
    # Взять название исходной папки
25
    if source_dir[-1] == '/':
26
        src_folder = source_dir.split('/')[-2]
27
    else:
28
        src_folder = source_dir.split('/')[-1]
29
    
30
    # Определить название архива-бэкапа
31
    name = src_folder + '_' + str(datetime.utcnow())
32
    archive_name = os.path.expanduser(os.path.join(backup_dir, name))
33

34
    shutil.make_archive(archive_name, compralg, backup_dir)
35

36
    print('The backup was created in ' + os.path.dirname(backup_dir))
37

38

39
def logger(journal):
40
    """Логирование событий"""
41
    file_exists = os.path.isfile(journal)
42
    with open(journal, 'a', newline='') as csvfile:
43
        fieldnames = ['Directory', 'Path_to_backup', 'Time_of_creating', 'Result']
44
        writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
45
        if not file_exists:
46
            writer.writeheader()
47
        writer.writerow({'Directory': source_dir, 'Path_to_backup': backup_dir, 'Time_of_creating': str(datetime.utcnow()), 'Result': result})
48

49

50
if __name__ == "__main__":
51

52
    parser = argparse.ArgumentParser(description='Save backup of directory')
53
    parser.add_argument('-d', '--directory',
54
                        dest='source_dir',
55
                        type=str,
56
                        required=True,
57
                        help='It\'s a directory for backupping')
58
    parser.add_argument('-o', '--output',
59
                        dest='backup_dir',
60
                        type=str,
61
                        required=True,
62
                        help='It\'s a directory with backups')
63
    parser.add_argument('-a', '--compralg',
64
                        dest='compralg',
65
                        type=str,
66
                        default='gztar',
67
                        required=False,
68
                        help='Сompression algorithm, please enter \'zip\' for using zip or \'targz\' for using targz \n'
69
                        r'You can also use "tar", "bztar" or "xztar"')
70
    parser.add_argument('-j', '--log_journal',
71
                        dest='journal',
72
                        default=LOG_FILE,
73
                        required=False,
74
                        help='It\'s a journal with logs')
75
    args = parser.parse_args()
76

77
    source_dir = args.source_dir
78
    backup_dir = args.backup_dir
79
    journal = args.journal
80
    compralg = args.compralg
81
    result = 'success'
82

83
    try:
84
        backup(source_dir, backup_dir, compralg)
85
    except Exception as e:  
86
        print(e, file=sys.stderr)
87
        result = 'fail'
88
    finally:
89
        logger(journal)
90

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.