forked from xolox/python-rsync-system-backup
-
Notifications
You must be signed in to change notification settings - Fork 0
/
cbackupmirror.py
75 lines (58 loc) · 2 KB
/
cbackupmirror.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import coloredlogs
import logging
import sys
from executor.contexts import create_context
import rsync_system_backup as rsb
# Config
SYSLOG_HOST = "192.168.112.11"
SYSLOG_PORT = 514
BACKUP_SOURCE = "[email protected]:/data"
BACKUP_DESTINATION = "/data/backup-data/data"
def setup_logging():
coloredlogs.install(syslog=True)
log = logging.getLogger()
syslog = logging.handlers.SysLogHandler(address=(SYSLOG_HOST, SYSLOG_PORT))
log.addHandler(syslog)
return log
def do_backup():
log = logging.getLogger()
program_opts = {
'backup_enabled': True,
'snapshot_enabled': True,
'rotate_enabled': True,
'sudo_enabled': False,
'dry_run': False,
'multi_fs' : True,
'notifications_enabled': False,
'rsync_verbose_count': 1,
'rsync_show_progress': True,
'source_context': create_context(),
'source': BACKUP_SOURCE,
'destination': rsb.Destination(expression=BACKUP_DESTINATION)
}
try:
# Initialize the program with the command line
# options and execute the requested action(s).
b = rsb.RsyncSystemBackup(**program_opts).execute()
except Exception as e:
if isinstance(e, rsb.exceptions.RsyncSystemBackupError):
# Special handling when the backup disk isn't available.
if isinstance(e, rsb.exceptions.MissingBackupDiskError):
log.info("Skipping backup: %s", e)
return 1
# Known problems shouldn't produce
# an intimidating traceback to users.
log.error("Aborting due to error: %s", e)
else:
# Unhandled exceptions do get a traceback,
# because it may help fix programming errors.
log.exception("Aborting due to unhandled exception!")
return 1
else:
return 0
def main():
log = setup_logging()
log.info("Starting backup script")
return do_backup()
if __name__ == '__main__':
sys.exit(main())