как временное решение скрипт на баше, чтобы делать бэкапы
#!/bin/sh basedir="/dir/to/backup" name="sitename" wwwdir="sitepath" sqlbase="basename" sqllogin="username" sqlpwd="password" curDate=$(printf `date "+%Y-%m-%d"`) #получаем текущую дату dumpDir=${name}${curDate} cd ${basedir} if [[ $(find . -type d -name ${dumpDir}) -eq $(${basedir}"/"${dumpDir})]] then printf "This directory "${baseDir}${dumpDir}" already exist" else mkdir ${dumpDir} fi cd ${baseDir}${dumpDir} tar czPf ${dumpDir}.tar.gz ${wwwdir} /usr/local/bin/mysqldump -hlocalhost -u${sqllogin} -p${sqlpwd} sqlbase > ${dumpDir}.sql tar czf ${dumpDir}.sql.tar.gz ${dumpDir}.sql unlink ${dumpDir}.sql if [[ $(find . -name "CHECKSUM.MD5") -eq $(${basedir}${dumpDir}"/CHECKSUM.MD5")]] then unlink "CHECKSUM.MD5" fi md5 ${dumpDir}.tar.gz ${dumpDir}.sql.tar.gz >> "CHECKSUM.MD5" chmod ugo+w . *
и скрипт на питоне, чтобы их забирать на другую машину
#if __name__ == '__main__': # print ('not main module') # exit() import os import re import sys import datetime import time import glob import linecache import hashlib import shutil from datetime import date from ftplib import FTP fromsite = r'example.com' #ftp ftpuser = r'ftpuser' #user ftppassword = r'ftppassword' #pass todir = r'/dir/backup/' #dir on ftp from server dir = r'D:\backup' #dir to save files from local now = datetime.datetime.now() year, month, day, hour, minutes, sec, wday, yday, isdst = now.timetuple() today = "%4d-%02d-%02d" % (year,month,day) pacients = [{'name': 'site1.com', 'remoteList': ''}, {'name': 'site2.com', 'remoteList': ''}] #[_print(filename) for filename in glob.glob("c:\\*.sys")] def prepareDate(temp): temp = temp.split('.')[-1].split('-') return datetime.date(int(temp[0]), int(temp[1]), int(temp[2])) def download(localPath, fileName): # try: fh = open(fileName, 'wb') print ('Transfer filename %s...' % fileName) connection.retrbinary('RETR ' + fileName, fh.write) #transfer file fh.close() # except: # print ('error transfer filename %s!' % fileName) # time.sleep(60) # download(localPath, fileName) def md5(pathDir): checkList = {re.search(r'\(([^\)]+)', line).group(1): re.search(r'=\s*(.*)\n*$',line).group(1) for line in open(os.path.join(pathDir, "CHECKSUM.MD5"), "r").readlines()} for element in checkList.items(): m = hashlib.md5() with open(os.path.join(pathDir, element[0]), "rb") as fh: m.update(fh.read()) if m.hexdigest() != element[1]: download(pathDir, element[0]) def delCat(folders): # connection.cwd(todir) if len(folders)>8: for num in range(0, len(folders)-8): try: connection.cwd(folders[num]) [connection.delete(file)for file in connection.nlst()] connection.cwd(todir) connection.rmd(folders[num]) print(folders[num], 'delete') except: time.sleep(60) print('error del %s' % folders[num]) delCat(folders) # connection.quit() """connect""" connected = None timer = 0 while not connected: timer = timer + 1 try: connection = FTP(fromsite, ftpuser, ftppassword) print ('connection with %s' % fromsite) connection.cwd(todir) connected = 1 except: connected = None print('error connect %s' % fromsite) if timer > 4: exit() """create list""" for pacient in pacients: pacient['remoteList'] = sorted(list(set(x.split('/')[0] for x in sorted(connection.nlst(pacient['name'] + '*'))))) pacient['localList'] = glob.glob(os.path.join(dir, pacient['name']) + '*') pacient['localList'] = sorted([os.path.basename(x) for x in pacient['localList']]) """check folders""" for pacient in pacients: if not len(pacient['localList']) or (prepareDate(pacient['localList'][-1])<prepareDate(pacient['remoteList'][-1])): a = os.path.join(dir, pacient['remoteList'][-1]) connection.cwd(os.path.join(todir, pacient['remoteList'][-1])) if not os.path.exists(a): os.mkdir(a) os.chdir(a) for file in connection.nlst(): download(a, file) connection.quit() """check md5""" for pacient in pacients: md5(os.path.join(dir, pacient['remoteList'][-1])) connected = None while not connected: try: connection = FTP(fromsite, ftpuser, ftppassword) print ('connection with %s' % fromsite) connection.cwd(todir) connected = 1 except: connected = None print('error connect %s' % fromsite) """delete old""" #for pacient in pacients: # delCat(pacient['remoteList']) connection.quit() print('connection quit')