Add locking of borgmatic config file
This prevents multiple instances of borgmatic from running against the same config file. This is particularly important when there are pre-backup scripts with side effects
This commit is contained in:
parent
4385f2a36a
commit
1d1df99ee8
|
@ -566,9 +566,25 @@ def main(): # pragma: no cover
|
|||
logger.debug('Ensuring legacy configuration is upgraded')
|
||||
convert.guard_configuration_upgraded(LEGACY_CONFIG_PATH, config_filenames)
|
||||
|
||||
locks = []
|
||||
for config_filename,config in configs.items():
|
||||
lock_config = config.get("location",dict()).get("lock_config",False)
|
||||
if lock_config:
|
||||
f = open(config_filename)
|
||||
try:
|
||||
fcntl.flock(f.fileno(), fcntl.LOCK_EX | fcntl.LOCK_NB)
|
||||
except IOError:
|
||||
logger.critical("Failed to acquire lock for {}".format(config_filename))
|
||||
sys.exit(0))
|
||||
locks.append(f)
|
||||
|
||||
summary_logs = parse_logs + list(collect_configuration_run_summary_logs(configs, arguments))
|
||||
summary_logs_max_level = max(log.levelno for log in summary_logs)
|
||||
|
||||
# this removes the reference to the open files which python will garbage collect the file objects
|
||||
# and close them
|
||||
locks = None
|
||||
|
||||
for message in ('', 'summary:'):
|
||||
log_record(
|
||||
levelno=summary_logs_max_level,
|
||||
|
|
Loading…
Reference in New Issue