diff --git a/jobs.py b/jobs.py
index 484ecd1a77bd2939e73202c5703711156a4da8e1..884574d0d722f01d62b1baef6d1288c40a3d516b 100644
--- a/jobs.py
+++ b/jobs.py
@@ -141,20 +141,25 @@ def jobs_schedule(hostname):
 	if not hostdata:
 		return 'no hostdata sent', 400
 	job = None
+	tries = 0
 	jobtypes = hostdata['jobtypes'] if 'jobtypes' in hostdata else []
 	while (not job):
-		query("BEGIN")
-		for i in query('SELECT * FROM jobs WHERE state = "ready" ORDER BY priority DESC'):
-			if i['type'] in hostdata['jobtypes'] and \
-					i['queue'] in hostdata['queues']:
-				job = i
-				break
-		if not job:
-			return 'no jobs', 503
-		modify('UPDATE jobs SET state="scheduled", worker = ?, time_scheduled = ? WHERE id = ?', hostname, datetime.now(), job['id']) 
 		try:
+			query("BEGIN")
+			for i in query('SELECT * FROM jobs WHERE state = "ready" ORDER BY priority DESC'):
+				if i['type'] in hostdata['jobtypes'] and \
+						i['queue'] in hostdata['queues']:
+					job = i
+					break
+			if not job:
+				return 'no jobs', 503
+			modify('UPDATE jobs SET state="scheduled", worker = ?, time_scheduled = ? WHERE id = ?', hostname, datetime.now(), job['id']) 
 			query("COMMIT")
-		except:
+		except OperationalError:
+			tries += 1
 			job = None
 			sleep(random.randinti(0,50))
+			if tries > 10:
+				return 'no jobs', 503
+
 	return Response(json.dumps(job, default=date_json_handler), mimetype='application/json')