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