Backup Scheduler

import schedule

import shutil

import time

import os

from datetime import datetime


# ------------------------------

# CONFIGURATION

# ------------------------------

SOURCE_FOLDER = r"E:\MyData"           # Folder to back up

DESTINATION_FOLDER = r"F:\Backups"     # External drive / backup location


BACKUP_FREQUENCY = "hourly"            # options: hourly, daily, custom



# ------------------------------

# Create destination folder if missing

# ------------------------------

def ensure_destination():

    if not os.path.exists(DESTINATION_FOLDER):

        os.makedirs(DESTINATION_FOLDER)

        print(f"[INFO] Created backup directory: {DESTINATION_FOLDER}")



# ------------------------------

# Perform Backup

# ------------------------------

def perform_backup():

    ensure_destination()


    timestamp = datetime.now().strftime("%Y-%m-%d_%H-%M-%S")

    backup_path = os.path.join(DESTINATION_FOLDER, f"backup_{timestamp}")


    try:

        print(f"[START] Backing up '{SOURCE_FOLDER}' → '{backup_path}'")

        shutil.copytree(SOURCE_FOLDER, backup_path)

        print(f"[DONE] Backup completed successfully! ✔️\n")

    except Exception as e:

        print(f"[ERROR] Backup failed: {e}\n")



# ------------------------------

# Schedule Backup

# ------------------------------

def schedule_backups():

    if BACKUP_FREQUENCY == "hourly":

        schedule.every().hour.do(perform_backup)

        print("[SCHEDULER] Backup scheduled: Every hour.")

    

    elif BACKUP_FREQUENCY == "daily":

        schedule.every().day.at("00:00").do(perform_backup)

        print("[SCHEDULER] Backup scheduled: Every day at 12:00 AM.")

    

    else:

        # custom frequency example: every 10 minutes

        schedule.every(10).minutes.do(perform_backup)

        print("[SCHEDULER] Backup scheduled: Every 10 minutes (custom).")



# ------------------------------

# MAIN LOOP

# ------------------------------

def main():

    print("===== Python Backup Scheduler Started =====")

    print(f"Source Folder:      {SOURCE_FOLDER}")

    print(f"Destination Folder: {DESTINATION_FOLDER}")

    print("=================================================\n")


    schedule_backups()


    # Continuous loop

    while True:

        schedule.run_pending()

        time.sleep(1)



if __name__ == "__main__":

    main()


No comments: