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:
Post a Comment