diff --git a/tasks/users/gitscript_cron.yml b/tasks/users/gitscript_cron.yml
index 0f8778eb3d23842284be65e8b2b6118179e1b9c6..72e001bbd6a2a81b9a35865967e03ca34e260304 100644
--- a/tasks/users/gitscript_cron.yml
+++ b/tasks/users/gitscript_cron.yml
@@ -3,13 +3,16 @@
 
 - block:
 
-  - name: "Create Update Script"
+  - name: "Create Update Scripts"
     template:
-      src='scripts/update/gitscript.jinja2'
-      dest='{{ webRoot }}/.update'
+      src='scripts/update/{{ item }}.jinja2'
+      dest='{{ webRoot }}/.{{ item }}'
       owner='root'
       group='root'
       mode='755'
+    with_items:
+      - 'update'
+      - 'update-loop'
 
   - name: "Crontab for Update Script"
     cron:
@@ -19,7 +22,7 @@
       weekday='{{ drupal.src.cron.weekday|default(omit) }}'
       hour='{{ drupal.src.cron.hour|default(omit) }}'
       minute='{{ drupal.src.cron.minute|default(omit) }}'
-      job='{{ webRoot }}/.update >>{{ webRoot }}/../log/git-update.log 2>&1'
+      job='{{ webRoot }}/.update-loop >>{{ webRoot }}/../log/git-update.log 2>&1'
       user='root'
       disabled='{{ crons_disabled|default(false) }}'
 
diff --git a/templates/scripts/update/update-loop.jinja2 b/templates/scripts/update/update-loop.jinja2
new file mode 100644
index 0000000000000000000000000000000000000000..7546fd3485f0a368af9ed8fe50a2a6d08f78ebc7
--- /dev/null
+++ b/templates/scripts/update/update-loop.jinja2
@@ -0,0 +1,30 @@
+#!/usr/bin/env bash
+
+# Get our own process ID.
+mypid="$$";
+if [ "$mypid" = "" ] || ! echo "$mypid" | grep "^[0-9][0-9]*$" >/dev/null; then
+  echo "Error getting current PID.";
+  exit 1;
+fi;
+
+# Check if there are other .update-loop processes.
+if ps -eo pid,cmd | grep "\/\.update-loop$" | grep -v "grep\|sudo\|^\s*$mypid\s" >/dev/null; then
+  echo "Skip: .update-loop is already running.";
+  exit 0;
+fi;
+
+# Get path to the actual update script.
+scriptfile="$0";
+scriptdir="$(dirname "$scriptfile")";
+subscript="$scriptdir/.update";
+
+# Run the actual update script in a loop.
+while true; do
+  if ! "$subscript"; then
+    # In case the .update script returns an error wait the full 2 minutes.
+    # This way we have a chance to fix something and not get interfered / overrun by errors.
+    sleep 115;
+  fi;
+
+  sleep 5;
+done;
diff --git a/templates/scripts/update/gitscript.jinja2 b/templates/scripts/update/update.jinja2
similarity index 100%
rename from templates/scripts/update/gitscript.jinja2
rename to templates/scripts/update/update.jinja2