bigeagle před 11 roky
rodič
revize
f88b89e873
3 změnil soubory, kde provedl 16 přidání a 9 odebrání
  1. 1 0
      examples/shell_provider.sh
  2. 13 8
      tunasync/jobs.py
  3. 2 1
      tunasync/tunasync.py

+ 1 - 0
examples/shell_provider.sh

@@ -2,3 +2,4 @@
 echo $TUNASYNC_LOCAL_DIR
 echo $TUNASYNC_LOG_FILE
 sleep 5
+exit 1

+ 13 - 8
tunasync/jobs.py

@@ -7,7 +7,7 @@ import signal
 import Queue
 
 
-def run_job(sema, child_q, manager_q, provider):
+def run_job(sema, child_q, manager_q, provider, **settings):
     aquired = False
     setproctitle("tunasync-{}".format(provider.name))
 
@@ -20,24 +20,29 @@ def run_job(sema, child_q, manager_q, provider):
 
     signal.signal(signal.SIGTERM, before_quit)
 
+    max_retry = settings.get("max_retry", 1)
     while 1:
         try:
             sema.acquire(True)
         except:
             break
         aquired = True
-        print("start syncing {}".format(provider.name))
 
         for hook in provider.hooks:
             hook.before_job(name=provider.name)
 
-        provider.run()
+        for retry in range(max_retry):
+            print("start syncing {}, retry: {}".format(provider.name, retry))
+            provider.run()
 
-        status = "success"
-        try:
-            provider.wait()
-        except sh.ErrorReturnCode:
-            status = "fail"
+            status = "success"
+            try:
+                provider.wait()
+            except sh.ErrorReturnCode:
+                status = "fail"
+
+            if status == "success":
+                break
 
         for hook in provider.hooks[::-1]:
             try:

+ 2 - 1
tunasync/tunasync.py

@@ -213,7 +213,8 @@ class TUNASync(object):
         child_queue = Queue()
         p = Process(
             target=jobs.run_job,
-            args=(self.semaphore, child_queue, self.channel, provider, )
+            args=(self.semaphore, child_queue, self.channel, provider, ),
+            kwargs={'max_retry': self._settings['global']['max_retry']}
         )
         p.start()
         self.processes[name] = (child_queue, p)