There is no way for multiple schedules option. the only way is to schedule it every X number of hours. i want to run the backups every say 2 hours during the day and freeze for the night while there is no activity.
Or is there a way to schedule enable / disable Duplicati service
Not that I have any ability to make this happen, but I’m curious if this is still a feature people are interested in and how it’s use is envisioned.
For example, is it machine responsiveness people want? Network bandwidth conservation? Etc…
a simple “run from 9P to 6A then interrupt the backup even if not done” (aka don’t run when I’m likely to be using the computer)
run for 2 hours every other hour (aka let other tasks have chance)
run when machine “not in use” (aka don’t run when I’m at the keyboard)
run when network “not in use” (aka don’t run when I’m watching Netflix)
let two (or more) jobs flip back and forth rather than make one job wait until another is fully completed (aka faux multitasking)
etc.
Note that I don’t know how doable it is with the current scheduler system so it’s likely a fairly big rewrite would be needed but until that possibly happens, it sounds like some Windows users have had luck with has SysInternals pssuspend tool:
I’ve taken the code that was provided and added and tested this functionality, so I thought I’d share it in case it helps others. My thanks to the original author and @kenkendk
#!/usr/bin/env python3
import requests
import urllib.parse
import sys
class DuplicatiServer(object):
def __init__(self, base_url):
self.base_url = base_url
self.cookiejar = requests.cookies.RequestsCookieJar()
self.headers = dict()
def fetch(self, path, post=False, data=None):
for attempt in range(2): # we may get a "Missing XSRF token" error on the first attempt
if post:
r = requests.post(self.base_url + path, cookies=self.cookiejar, headers=self.headers, data=data)
else:
r = requests.get(self.base_url + path, cookies=self.cookiejar, headers=self.headers, data=data)
self.cookiejar.update(r.cookies)
self.headers['X-XSRF-Token'] = urllib.parse.unquote(r.cookies['xsrf-token'])
if r.status_code != 400:
break
return r
def pause(self):
return self.fetch('api/v1/serverstate/pause', post=True, data=b'')
def resume(self):
return self.fetch('api/v1/serverstate/resume', post=True, data=b'')
def run(self, id):
return self.fetch('api/v1/backup/' + str(id) + '/run', post=True, data=b'')
if __name__ == '__main__':
ds = DuplicatiServer("http://localhost:8200/")
r = None
try:
cmd = sys.argv[1]
except IndexError:
cmd = None
if cmd == 'pause':
r = ds.pause()
elif cmd == 'resume':
r = ds.resume()
elif cmd == 'run':
r = ds.run(sys.argv[2])
else:
print("Syntax: %s [pause|resume|run id]" % sys.argv[0])
print("Where id = the number of the backup task to run")
sys.exit(1)
if r and r.status_code == 200:
print("OK")
else:
print("Something went wrong -- %d %s" % (r.status_code, r.reason))
Hey JonMikeIV…this is an old topic, but I would be interested in this feature. I’m using a machine that would be beneficial to have multiple backups during the day while it is in use, but after a certain time it wouldn’t be needed. Even if it was just twice a day, say at noon and at 6.
Right now I have the backups set to run every 6 hours, which gets the job done, but it also means I have 4 backups a day when only 2 are needed.
I could set up two separate backups to run at those times, but that would require twice the backup storage space (which maybe I need to do anyway for redundancy).
Thanks for letting us know you’d find this useful.
I don’t know what any progress has been made on it so far (we’re mostly focused on performance and bug squashing right now) but I do know there’s a “Custom” selection in the “Run again every” field - but I have no idea how that works.
It’s possible somebody else like @Pectojin, @kees-z, or @renestach might have some thoughts as to whether or not it could be used to do what you want.