Send rsync output to logger

This commit is contained in:
daniele 2023-04-15 21:36:45 +02:00
parent 661a5d4232
commit 1a251f61af
Signed by: fuxino
GPG Key ID: 981A2B2A3BBF5514
3 changed files with 30 additions and 12 deletions

View File

@ -12,7 +12,8 @@ url="https://github.com/Fuxino/simple_backup.git"
license=('GPL3') license=('GPL3')
makedepends=('git') makedepends=('git')
depends=('python3' depends=('python3'
'rsync') 'rsync'
'python-dotenv')
install=${pkgname}.install install=${pkgname}.install
source=(git+https://github.com/Fuxino/${pkgname}.git) source=(git+https://github.com/Fuxino/${pkgname}.git)
sha256sums=('SKIP') sha256sums=('SKIP')

View File

@ -8,7 +8,7 @@ inputs=/home/my_home,/etc
backup_dir=/media/Backup backup_dir=/media/Backup
#Exclude patterns. Use a comma to separate items #Exclude patterns. Use a comma to separate items
exclude=.gvfs,.local/share/gvfs-metadata,.cache,.dbus,.Trash,.local/share/Trash,.macromedia,.adobe,.recently-used,.recently-used.xbel,.thumbnails,*.backup* exclude=.gvfs,.local/share/gvfs-metadata,.cache,.dbus,.Trash,.local/share/Trash,.macromedia,.adobe,.recently-used,.recently-used.xbel,.thumbnails
#Number of snapshots to keep (use -1 to keep all) #Number of snapshots to keep (use -1 to keep all)
keep=-1 keep=-1

View File

@ -9,7 +9,7 @@ import configparser
import logging import logging
from logging import StreamHandler from logging import StreamHandler
from logging.handlers import RotatingFileHandler from logging.handlers import RotatingFileHandler
import subprocess from subprocess import Popen, PIPE, STDOUT
from datetime import datetime from datetime import datetime
from tempfile import mkstemp from tempfile import mkstemp
@ -30,6 +30,7 @@ class Backup:
self._output_dir = '' self._output_dir = ''
self._inputs_path = '' self._inputs_path = ''
self._exclude_path = '' self._exclude_path = ''
self._err_flag = False
def check_params(self): def check_params(self):
if self.inputs is None or len(self.inputs) == 0: if self.inputs is None or len(self.inputs) == 0:
@ -93,11 +94,11 @@ class Backup:
try: try:
self._last_backup = os.readlink(f'{self.output}/simple_backup/last_backup') self._last_backup = os.readlink(f'{self.output}/simple_backup/last_backup')
except Exception: except Exception:
logger.warning('No previous backup could be read') logger.error('Previous backup could not be read')
# Function to read configuration file # Function to read configuration file
def run(self): def run(self):
logger.info('Starting backup') logger.info('Starting backup...')
self.create_backup_dir() self.create_backup_dir()
self.find_last_backup() self.find_last_backup()
@ -107,6 +108,7 @@ class Backup:
os.remove(f'{self.output}/simple_backup/last_backup') os.remove(f'{self.output}/simple_backup/last_backup')
except Exception: except Exception:
logger.error('Failed to remove last_backup link') logger.error('Failed to remove last_backup link')
self._err_flag = True
inputs_handle, self._inputs_path = mkstemp(prefix='tmp_inputs', text=True) inputs_handle, self._inputs_path = mkstemp(prefix='tmp_inputs', text=True)
exclude_handle, self._exclude_path = mkstemp(prefix='tmp_exclude', text=True) exclude_handle, self._exclude_path = mkstemp(prefix='tmp_exclude', text=True)
@ -135,12 +137,16 @@ class Backup:
f'{self._exclude_path} --files-from={self._inputs_path} / "{self._output_dir}" ' +\ f'{self._exclude_path} --files-from={self._inputs_path} / "{self._output_dir}" ' +\
'--ignore-missing-args' '--ignore-missing-args'
subprocess.run(rsync, shell=True) p = Popen(rsync, stdout=PIPE, stderr=STDOUT, shell=True)
output, _ = p.communicate()
logger.info(f'Output of rsync command: {output.decode("utf-8")}')
try: try:
os.symlink(self._output_dir, f'{self.output}/simple_backup/last_backup') os.symlink(self._output_dir, f'{self.output}/simple_backup/last_backup')
except Exception: except Exception:
logger.error('Failed to create last_backup link') logger.error('Failed to create last_backup link')
self._err_flag = True
if self.keep != -1: if self.keep != -1:
self.remove_old_backups() self.remove_old_backups()
@ -148,6 +154,11 @@ class Backup:
os.remove(self._inputs_path) os.remove(self._inputs_path)
os.remove(self._exclude_path) os.remove(self._exclude_path)
logger.info('Backup completed')
if self._err_flag:
logger.warning('Some errors occurred (check log for details)')
load_dotenv() load_dotenv()
euid = os.geteuid() euid = os.geteuid()
@ -161,15 +172,21 @@ else:
logging.getLogger().setLevel(logging.DEBUG) logging.getLogger().setLevel(logging.DEBUG)
logger = logging.getLogger(os.path.basename(__file__)) logger = logging.getLogger(os.path.basename(__file__))
c_handler = StreamHandler() c_handler = StreamHandler()
#f_handler = RotatingFileHandler(f'{homedir}/.simple_backup/simple_backup.log')
f_handler = RotatingFileHandler(f'./simple_backup.log', maxBytes=1024000, backupCount=5) try:
f_handler = RotatingFileHandler(f'{homedir}/.simple_backup/simple_backup.log', maxBytes=1024000, backupCount=5)
except Exception:
f_handler = None
c_handler.setLevel(logging.INFO) c_handler.setLevel(logging.INFO)
f_handler.setLevel(logging.INFO)
c_format = logging.Formatter('%(name)s - %(levelname)s - %(message)s') c_format = logging.Formatter('%(name)s - %(levelname)s - %(message)s')
f_format = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
c_handler.setFormatter(c_format) c_handler.setFormatter(c_format)
f_handler.setFormatter(f_format)
logger.addHandler(c_handler) logger.addHandler(c_handler)
if f_handler:
f_handler.setLevel(logging.INFO)
f_format = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
f_handler.setFormatter(f_format)
logger.addHandler(f_handler) logger.addHandler(f_handler)