From 69bd137b4e0993cf3b8a0a16f34a62b235466a09 Mon Sep 17 00:00:00 2001 From: Marc Schiller Date: Wed, 11 May 2016 10:11:16 +0200 Subject: [PATCH] Added a pre-backup script to complement post-backup script. --- management/backup.py | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/management/backup.py b/management/backup.py index 2bb499ef..be87a429 100755 --- a/management/backup.py +++ b/management/backup.py @@ -2,9 +2,10 @@ # This script performs a backup of all user data: # 1) System services are stopped. -# 2) An incremental encrypted backup is made using duplicity. -# 3) The stopped services are restarted. -# 4) STORAGE_ROOT/backup/after-backup is executd if it exists. +# 2) STORAGE_ROOT/backup/before-backup is executed if it exists. +# 3) An incremental encrypted backup is made using duplicity. +# 4) The stopped services are restarted. +# 5) STORAGE_ROOT/backup/after-backup is executed if it exists. import os, os.path, shutil, glob, re, datetime, sys import dateutil.parser, dateutil.relativedelta, dateutil.tz @@ -258,6 +259,15 @@ def perform_backup(full_backup): service_command("postfix", "stop", quit=True) service_command("dovecot", "stop", quit=True) + # Execute a pre-backup script that copies files outside the homedir. + # Run as the STORAGE_USER user, not as root. Pass our settings in + # environment variables so the script has access to STORAGE_ROOT. + pre_script = os.path.join(backup_root, 'before-backup') + if os.path.exists(pre_script): + shell('check_call', + ['su', env['STORAGE_USER'], '-c', pre_script, config["target"]], + env=env) + # Run a backup of STORAGE_ROOT (but excluding the backups themselves!). # --allow-source-mismatch is needed in case the box's hostname is changed # after the first backup. See #396.