Поместите свой резервный код в отдельный поток, а затем создайте бесконечное while l oop, которое ждет в зависимости от вашего интервала ожидания. Я прикрепил код ниже.
import os
import sys
import shutil
from threading import Thread
import time
class BackupUtil(Thread):
def __init__(self, interval, src_path, dst_path):
super().__init__()
self.interval = interval
self.src_path = src_path
self.dst_path = dst_path
def run(self):
while True:
b = '%Y{0}%m{0}%d{0}%H{0}%M{0}%S'.format('.')
target = self.dst_path + os.sep + time.strftime(b)
archive = shutil.make_archive(target, 'zip', self.src_path, self.dst_path)
if os.path.exists(archive):
print('Backup success!', target)
else:
print('Backup failed.')
time.sleep(self.interval)
if __name__ == '__main__':
src = sys.argv[1] if os.path.exists(sys.argv[1]) else os.path.join('D', 'py')
dst = sys.argv[2] if os.path.exists(sys.argv[2]) else os.path.join('D', 'Backup')
backup = BackupUtil(10, src, dst)
backup.start()
В качестве альтернативы, если вы используете linux или WSL
, вы можете настроить его для работы как cron
. Добавьте python shebang в свой сценарий #!/usr/bin/env python3
, затем сохраните сценарий резервного копирования примерно как /mnt/c/py/backup_archive
. Я предпочитаю удалить расширение .py
, чтобы мы могли легко определить, что сценарий предназначен для выполнения. Наконец, убедитесь, что он действительно исполняемый (chmod +x /mnt/c/py/backup_archive
или chmod 775 /mnt/c/py/backup_archive
).
#!/usr/bin/env python3
import os
import sys
import shutil
from threading import Thread
import time
class BackupUtil(Thread):
def __init__(self, interval, src_path, dst_path):
super().__init__()
self.interval = interval
self.src_path = src_path
self.dst_path = dst_path
def run(self):
while True:
b = '%Y{0}%m{0}%d{0}%H{0}%M{0}%S'.format('.')
target = self.dst_path + os.sep + time.strftime(b)
archive = shutil.make_archive(target, 'zip', self.src_path, self.dst_path)
if os.path.exists(archive):
print('Backup success!', target)
else:
print('Backup failed.')
time.sleep(self.interval)
if __name__ == '__main__':
src = sys.argv[1] if os.path.exists(sys.argv[1]) else os.path.join('D', 'py')
dst = sys.argv[2] if os.path.exists(sys.argv[2]) else os.path.join('D', 'Backup')
backup = BackupUtil(10, src, dst)
backup.start()
Затем добавьте задание cron для скрипта, установив интервал в 1 минуту (не менее 1 минуты интервалы по умолчанию, тоже не думаю, что это необходимо).
crontab -e
1 * * * * /mnt/c/py/backup_archive arg1 arg2