mirror of
https://github.com/usmannasir/cyberpanel.git
synced 2025-10-26 15:56:34 +01:00
127 lines
5.3 KiB
Python
127 lines
5.3 KiB
Python
#!/usr/local/CyberCP/bin/python
|
|
import os
|
|
import os.path
|
|
import sys
|
|
import django
|
|
sys.path.append('/usr/local/CyberCP')
|
|
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "CyberCP.settings")
|
|
try:
|
|
django.setup()
|
|
except:
|
|
pass
|
|
from plogical import CyberCPLogFileWriter as logging
|
|
import os
|
|
import time
|
|
from plogical.backupSchedule import backupSchedule
|
|
from plogical.processUtilities import ProcessUtilities
|
|
from re import match,I,M
|
|
import signal
|
|
from datetime import datetime
|
|
from websiteFunctions.models import BackupJob
|
|
|
|
class backupScheduleLocal:
|
|
localBackupPath = '/home/cyberpanel/localBackupPath'
|
|
runningPath = '/home/cyberpanel/localBackupPID'
|
|
now = datetime.now()
|
|
|
|
@staticmethod
|
|
def prepare():
|
|
try:
|
|
|
|
if os.path.exists(backupScheduleLocal.runningPath):
|
|
output = ProcessUtilities.outputExecutioner('ps aux')
|
|
pid = open(backupScheduleLocal.runningPath, 'r').read()
|
|
|
|
if output.find('/usr/local/CyberCP/plogical/backupScheduleLocal.py') > -1 and output.find(pid) > -1:
|
|
print('\n\nLocal backup is already running with PID: %s. If you want to run again kindly kill the backup process: \n\n kill -9 %s.\n\n' % (pid, pid))
|
|
return 0
|
|
else:
|
|
os.remove(backupScheduleLocal.runningPath)
|
|
|
|
writeToFile = open(backupScheduleLocal.runningPath, 'w')
|
|
writeToFile.write(str(os.getpid()))
|
|
writeToFile.close()
|
|
|
|
backupRunTime = time.strftime("%m.%d.%Y_%H-%M-%S")
|
|
backupLogPath = "/usr/local/lscp/logs/local_backup_log." + backupRunTime
|
|
|
|
jobSuccessSites = 0
|
|
jobFailedSites = 0
|
|
|
|
backupSchedule.backupLog = BackupJob(logFile=backupLogPath, location=backupSchedule.LOCAL, jobSuccessSites=jobSuccessSites, jobFailedSites=jobFailedSites)
|
|
backupSchedule.backupLog.save()
|
|
|
|
writeToFile = open(backupLogPath, "a")
|
|
|
|
backupSchedule.remoteBackupLogging(backupLogPath, "#################################################")
|
|
backupSchedule.remoteBackupLogging(backupLogPath," Local Backup log for: " + backupRunTime)
|
|
backupSchedule.remoteBackupLogging(backupLogPath, "#################################################\n")
|
|
|
|
backupSchedule.remoteBackupLogging(backupLogPath, "")
|
|
backupSchedule.remoteBackupLogging(backupLogPath, "")
|
|
|
|
for virtualHost in os.listdir("/home"):
|
|
if match(r'^[a-zA-Z0-9-]*[a-zA-Z0-9-]{0,61}[a-zA-Z0-9-](?:\.[a-zA-Z0-9-]{2,})+$', virtualHost, M | I):
|
|
try:
|
|
retValues = backupSchedule.createLocalBackup(virtualHost, backupLogPath)
|
|
|
|
if retValues[0] == 0:
|
|
backupSchedule.remoteBackupLogging(backupLogPath, '[ERROR] Backup failed for %s, error: %s moving on..' % (virtualHost, retValues[1]), backupSchedule.ERROR)
|
|
jobFailedSites = jobFailedSites + 1
|
|
continue
|
|
|
|
if os.path.exists(backupScheduleLocal.localBackupPath):
|
|
backupPath = retValues[1] + ".tar.gz"
|
|
localBackupPath = '%s/%s' % (open(backupScheduleLocal.localBackupPath, 'r').read().rstrip('/'), backupRunTime)
|
|
|
|
command = 'mkdir -p %s' % (localBackupPath)
|
|
ProcessUtilities.normalExecutioner(command)
|
|
|
|
command = 'mv %s %s' % (backupPath, localBackupPath)
|
|
ProcessUtilities.normalExecutioner(command)
|
|
|
|
jobSuccessSites = jobSuccessSites + 1
|
|
except BaseException as msg:
|
|
|
|
jobFailedSites = jobFailedSites + 1
|
|
|
|
backupSchedule.remoteBackupLogging(backupLogPath,
|
|
'[ERROR] Backup failed for %s, error: %s moving on..' % (virtualHost, str(msg)), backupSchedule.ERROR)
|
|
|
|
backupSchedule.remoteBackupLogging(backupLogPath, "")
|
|
backupSchedule.remoteBackupLogging(backupLogPath, "")
|
|
|
|
backupSchedule.remoteBackupLogging(backupLogPath, "#################################################")
|
|
|
|
backupSchedule.remoteBackupLogging(backupLogPath, "")
|
|
backupSchedule.remoteBackupLogging(backupLogPath, "")
|
|
|
|
backupSchedule.remoteBackupLogging(backupLogPath, "Local backup job completed.\n")
|
|
|
|
writeToFile.close()
|
|
|
|
job = BackupJob.objects.get(logFile=backupLogPath)
|
|
job.jobFailedSites = jobFailedSites
|
|
job.jobSuccessSites = jobSuccessSites
|
|
job.save()
|
|
|
|
if os.path.exists(backupScheduleLocal.runningPath):
|
|
os.remove(backupScheduleLocal.runningPath)
|
|
|
|
except BaseException as msg:
|
|
logging.CyberCPLogFileWriter.writeToFile(str(msg) + " [214:startBackup]")
|
|
|
|
def main():
|
|
backupScheduleLocal.prepare()
|
|
|
|
|
|
def handler(signum, frame):
|
|
diff = datetime.now() - backupScheduleLocal.now
|
|
logging.CyberCPLogFileWriter.writeToFile('Signal: %s, time spent: %s' % (str(signum), str(diff.total_seconds())))
|
|
|
|
if __name__ == "__main__":
|
|
for i in range(1,32):
|
|
if i == 9 or i == 19 or i == 32:
|
|
continue
|
|
signal.signal(i, handler)
|
|
main() |