2
0
mirror of https://github.com/frappe/bench.git synced 2024-11-14 09:14:04 +00:00

fix(backups): setup backups for bench sites

Using python-crontab library instead of manual processing
This commit is contained in:
Gavin D'souza 2020-04-15 11:28:19 +05:30
parent e791410a31
commit 90f951c6ec

View File

@ -23,6 +23,7 @@ from distutils.spawn import find_executable
# imports - third party imports # imports - third party imports
import click import click
from crontab import CronTab
import requests import requests
from semantic_version import Version from semantic_version import Version
from six import iteritems from six import iteritems
@ -361,42 +362,27 @@ def get_sites(bench_path='.'):
return sites return sites
def get_bench_dir(bench_path='.'):
return os.path.abspath(bench_path)
def setup_backups(bench_path='.'): def setup_backups(bench_path='.'):
from bench.config.common_site_config import get_config
logger.info('setting up backups') logger.info('setting up backups')
bench_dir = get_bench_dir(bench_path=bench_path)
bench_dir = os.path.abspath(bench_path)
user = get_config('.').get('frappe_user')
logfile = os.path.join(bench_dir, 'logs', 'backup.log')
bench.set_frappe_version(bench_path=bench_path) bench.set_frappe_version(bench_path=bench_path)
system_crontab = CronTab(user=user)
if bench.FRAPPE_VERSION == 4: if bench.FRAPPE_VERSION == 4:
backup_command = "cd {sites_dir} && {frappe} --backup all".format(frappe=get_frappe(bench_path=bench_path),) backup_command = "cd {sites_dir} && {frappe} --backup all".format(frappe=get_frappe(bench_path=bench_path),)
else: else:
backup_command = "cd {bench_dir} && {bench} --site all backup".format(bench_dir=bench_dir, bench=sys.argv[0]) backup_command = "cd {bench_dir} && {bench} --site all backup".format(bench_dir=bench_dir, bench=sys.argv[0])
add_to_crontab('0 */6 * * * {backup_command} >> {logfile} 2>&1'.format(backup_command=backup_command, job_command = "{backup_command} >> {logfile} 2>&1".format(backup_command=backup_command, logfile=logfile)
logfile=os.path.join(get_bench_dir(bench_path=bench_path), 'logs', 'backup.log')))
if job_command not in str(system_crontab):
def add_to_crontab(line): job = system_crontab.new(command=job_command, comment="bench auto backups set for every 6 hours")
current_crontab = read_crontab() job.hour.every(6)
line = str.encode(line) system_crontab.write()
if not line in current_crontab:
cmd = ["crontab"]
if platform.system() == 'FreeBSD':
cmd = ["crontab", "-"]
s = subprocess.Popen(cmd, stdin=subprocess.PIPE)
s.stdin.write(current_crontab)
s.stdin.write(line + b'\n')
s.stdin.close()
def read_crontab():
s = subprocess.Popen(["crontab", "-l"], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
out = s.stdout.read()
s.stdout.close()
return out
def setup_sudoers(user): def setup_sudoers(user):
@ -553,7 +539,6 @@ def restart_supervisor_processes(bench_path='.', web_workers=False):
def restart_systemd_processes(bench_path='.', web_workers=False): def restart_systemd_processes(bench_path='.', web_workers=False):
from .config.common_site_config import get_config
bench_name = get_bench_name(bench_path) bench_name = get_bench_name(bench_path)
exec_cmd('sudo systemctl stop -- $(systemctl show -p Requires {bench_name}.target | cut -d= -f2)'.format(bench_name=bench_name)) exec_cmd('sudo systemctl stop -- $(systemctl show -p Requires {bench_name}.target | cut -d= -f2)'.format(bench_name=bench_name))
exec_cmd('sudo systemctl start -- $(systemctl show -p Requires {bench_name}.target | cut -d= -f2)'.format(bench_name=bench_name)) exec_cmd('sudo systemctl start -- $(systemctl show -p Requires {bench_name}.target | cut -d= -f2)'.format(bench_name=bench_name))