1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
| import os import zipfile import datetime import logging
backup_dir = "/home/minecraft/backups" server_path = "/root/mc"
logging.basicConfig(filename=os.path.join(backup_dir, "backup.log"), level=logging.ERROR, format='%(asctime)s - %(levelname)s - %(message)s') def backup_minecraft_server(): try: os.chdir(server_path) world_backup_file = "world_{}.zip".format(datetime.datetime.now().strftime('%Y-%m-%d_%H-%M-%S')) with zipfile.ZipFile(os.path.join(backup_dir, world_backup_file), "w", zipfile.ZIP_DEFLATED) as archive: for root, dirs, files in os.walk("world"): for file in files: archive.write(os.path.join(root, file)) nether_backup_file = "world_nether_{}.zip".format(datetime.datetime.now().strftime('%Y-%m-%d_%H-%M-%S')) with zipfile.ZipFile(os.path.join(backup_dir, nether_backup_file), "w", zipfile.ZIP_DEFLATED) as archive: for root, dirs, files in os.walk("world_nether"): for file in files: archive.write(os.path.join(root, file)) end_backup_file = "world_the_end_{}.zip".format(datetime.datetime.now().strftime('%Y-%m-%d_%H-%M-%S')) with zipfile.ZipFile(os.path.join(backup_dir, end_backup_file), "w", zipfile.ZIP_DEFLATED) as archive: for root, dirs, files in os.walk("world_the_end"): for file in files: archive.write(os.path.join(root, file)) merged_backup_file = "minecraft_backup_{}.zip".format(datetime.datetime.now().strftime('%Y-%m-%d_%H-%M-%S')) with zipfile.ZipFile(os.path.join(backup_dir, merged_backup_file), "w", zipfile.ZIP_DEFLATED) as archive: archive.write(os.path.join(backup_dir, world_backup_file), arcname="world.zip") archive.write(os.path.join(backup_dir, nether_backup_file), arcname="world_nether.zip") archive.write(os.path.join(backup_dir, end_backup_file), arcname="world_the_end.zip") os.remove(os.path.join(backup_dir, world_backup_file)) os.remove(os.path.join(backup_dir, nether_backup_file)) os.remove(os.path.join(backup_dir, end_backup_file)) backup_files = [] for file_name in os.listdir(backup_dir): file_path = os.path.join(backup_dir, file_name) if os.path.isfile(file_path): backup_files.append((file_path, datetime.datetime.fromtimestamp(os.path.getmtime(file_path)))) backup_files.sort(key=lambda x: x[1]) if len(backup_files) > 7: for file_path, file_time in backup_files[:-7]: os.remove(file_path) except Exception as e: logging.error(str(e)) if __name__ == "__main__": backup_minecraft_server()
|