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:
parent
e791410a31
commit
90f951c6ec
@ -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))
|
||||||
|
Loading…
Reference in New Issue
Block a user