Ankündigung

Einklappen
Keine Ankündigung bisher.

Backup Script als Logik

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Backup Script als Logik

    Hallo,

    Ich habe ein in der Kommandozeile funktionierendes Python Script zur Erstellung eines Backups meiner smarthome.db (Backup Pfad muss noch ausgelagert werden).
    Nun würde ich das gerne als Logik in sh.py integrieren und es via cron 1x / Tag laufen lassen.
    Ich habe es auch schon wie eine normale Logik eingebunden und ich kann sie auch via Backend auslösen, jedoch geschieht nichts. Vielleicht liegt es daran, dass User/Passwort um das Script ausführen zu können nicht hinterlegt sind? Ich verwende dafür den normalen smarthome user.

    -) Ist das möglich?
    -) Könnte man auch einen Log Eintrag bei durchgeführtem Backup erzeugen?

    mfg
    Markus
    Code:
    #!/usr/bin/env python
    
    from __future__ import print_function
    from __future__ import unicode_literals
    
    import sqlite3
    import shutil
    import time
    import os
    
    DESCRIPTION = """
                  Create a timestamped SQLite database backup, and
                  clean backups older than a defined number of days
                  """
    
    # How old a file needs to be in order
    NO_OF_DAYS = 3
    
    
    def sqlite3_backup(dbfile, backupdir):
        """Create timestamped database copy"""
    
        if not os.path.isdir(backupdir):
            raise Exception("Backup directory does not exist: {}".format(backupdir))
    
        backup_file = os.path.join(backupdir, os.path.basename(dbfile) +
                                   time.strftime("-%Y%m%d-%H%M%S"))
    
        connection = sqlite3.connect(dbfile)
        cursor = connection.cursor()
    
        # Lock database before making a backup
        cursor.execute('begin immediate')
        # Make new backup file
        shutil.copyfile(dbfile, backup_file)
        print("\nCreating {}...".format(backup_file))
        # Unlock database
        connection.rollback()
    
    
    def clean_data(backup_dir):
        """Delete files older than NO_OF_DAYS days"""
    
        print("\n------------------------------")
        print("Cleaning up old backups")
    
        for filename in os.listdir(backup_dir):
            backup_file = os.path.join(backup_dir, filename)
            if os.path.isfile(backup_file):
                if os.stat(backup_file).st_ctime < (time.time() - NO_OF_DAYS * 86400):
                    os.remove(backup_file)
                    print("Deleting {}...".format(backup_file))
    
    if __name__ == "__main__":
        db_file = "/usr/local/smarthome/var/db/smarthome.db"
        backup_dir = "/usr/local/smarthome/var/db/backup"
        sqlite3_backup(db_file, backup_dir)
        clean_data(backup_dir)
    
        print("\nBackup update has been successful.")
Lädt...
X