implemented exception handling for rsync 24

This commit is contained in:
Kevin Veen-Birkenbach 2023-12-13 08:55:02 +01:00
parent c4107d91b0
commit b83e481d01
2 changed files with 21 additions and 8 deletions

View File

@ -64,3 +64,4 @@ This project is licensed under the GNU Affero General Public License v3.0. The f
- https://zwischenzugs.com/2016/08/29/bash-to-python-converter/ - https://zwischenzugs.com/2016/08/29/bash-to-python-converter/
- https://en.wikipedia.org/wiki/Incremental_backup#Incremental - https://en.wikipedia.org/wiki/Incremental_backup#Incremental
- https://unix.stackexchange.com/questions/567837/linux-backup-utility-for-incremental-backups - https://unix.stackexchange.com/questions/567837/linux-backup-utility-for-incremental-backups
- https://chat.openai.com/share/6d10f143-3f7c-4feb-8ae9-5644c3433a65

View File

@ -8,20 +8,29 @@ import pathlib
import pandas import pandas
from datetime import datetime from datetime import datetime
class RsyncCode24Exception(Exception):
"""Exception for rsync error code 24."""
"""rsync warning: some files vanished before they could be transferred"""
pass
def bash(command): def bash(command):
print(command) print(command)
process = subprocess.Popen([command], stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True) process = subprocess.Popen([command], stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
out, err = process.communicate() out, err = process.communicate()
stdout = out.splitlines() stdout = out.splitlines()
output = [] stderr = err.decode("utf-8")
for line in stdout: output = [line.decode("utf-8") for line in stdout]
output.append(line.decode("utf-8"))
if process.wait() > bool(0):
print(command, out, err)
raise Exception("Exitcode is greater then 0")
return output
exitcode = process.wait()
if exitcode != 0:
print(f"Error in command: {command}\nOutput: {out}\nError: {err}\nExit code: {exitcode}")
if "rsync" in command and exitcode == 24:
raise RsyncCode24Exception(f"rsync error code 24 encountered: {stderr}")
raise Exception("Exit code is greater than 0")
return output
def print_bash(command): def print_bash(command):
output = bash(command) output = bash(command)
@ -95,7 +104,10 @@ for volume_name in volume_names:
link_dest_parameter="" link_dest_parameter=""
source_dir = "/var/lib/docker/volumes/" + volume_name + "/_data/" source_dir = "/var/lib/docker/volumes/" + volume_name + "/_data/"
rsync_command = "rsync -abP --delete --delete-excluded " + link_dest_parameter + source_dir + " " + files_rsync_destination_path rsync_command = "rsync -abP --delete --delete-excluded " + link_dest_parameter + source_dir + " " + files_rsync_destination_path
print_bash(rsync_command) try:
print_bash(rsync_command)
except RsyncCode24Exception:
print("Ignoring rsync error code 24, proceeding with the next command.")
print("stop containers...") print("stop containers...")
print("Backup data after container is stopped...") print("Backup data after container is stopped...")
print_bash("docker stop " + list_to_string(containers)) print_bash("docker stop " + list_to_string(containers))