1. import os
  2. import schedule
  3. import time
  4. import logging
  5. # Configure logging
  6. logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
  7. def check_directories(directories):
  8. """
  9. Checks if the specified directories exist.
  10. Returns a dictionary of errors, or an empty dictionary if all directories exist.
  11. """
  12. errors = {}
  13. for directory in directories:
  14. if not os.path.isdir(directory):
  15. errors[directory] = "Directory does not exist"
  16. elif not os.access(directory, os.R_OK):
  17. errors[directory] = "Directory is not readable"
  18. return errors
  19. def dry_run_schedule(directories, job_function, schedule_time):
  20. """
  21. Performs a dry-run of the schedule, checking directories for errors.
  22. """
  23. errors = check_directories(directories)
  24. if errors:
  25. logging.warning("Directory errors detected during dry-run:")
  26. for directory, error in errors.items():
  27. logging.warning(f" {directory}: {error}")
  28. print("Dry-run aborted due to directory errors.")
  29. return False # Indicate dry-run failure
  30. else:
  31. logging.info("Dry-run successful. All directories exist and are readable.")
  32. print("Dry-run successful. All directories exist and are readable.")
  33. return True # Indicate dry-run success
  34. def scheduled_job(job_function, schedule_time):
  35. """
  36. The actual scheduled job.
  37. """
  38. try:
  39. job_function()
  40. logging.info(f"Job executed successfully at {time.strftime('%Y-%m-%d %H:%M:%S')}")
  41. except Exception as e:
  42. logging.error(f"Job failed: {e}")
  43. def main():
  44. """
  45. Main function to set up and run the dry-run and scheduling.
  46. """
  47. directories_to_check = ["/path/to/directory1", "/path/to/directory2", "/path/to/directory3"] # Replace with your directory paths
  48. schedule_time = "0 * * * *" # Run every minute (example)
  49. # Define a sample job function - replace with your actual job
  50. def my_job():
  51. print("Running my scheduled job...")
  52. time.sleep(5) # Simulate some work
  53. print("Job completed.")
  54. if dry_run_schedule(directories_to_check, my_job, schedule_time):
  55. schedule.every().minute.do(scheduled_job, my_job, schedule_time) #uncomment if you want to run the scheduled job
  56. while True:
  57. schedule.run_pending()
  58. time.sleep(1)
  59. if __name__ == "__main__":
  60. main()

Add your comment