From 45e2a043b1c6fd923a6ad491c66571ac672d0e06 Mon Sep 17 00:00:00 2001 From: jurgenhaas <juergen@paragon-es.de> Date: Sat, 2 Feb 2019 11:11:02 +0100 Subject: [PATCH] ansible-inventories/arocom#2783 Change the mechanics of the update script --- tasks/users/gitscript_cron.yml | 11 ++++--- templates/scripts/update/update-loop.jinja2 | 30 +++++++++++++++++++ .../{gitscript.jinja2 => update.jinja2} | 0 3 files changed, 37 insertions(+), 4 deletions(-) create mode 100644 templates/scripts/update/update-loop.jinja2 rename templates/scripts/update/{gitscript.jinja2 => update.jinja2} (100%) diff --git a/tasks/users/gitscript_cron.yml b/tasks/users/gitscript_cron.yml index 0f8778e..72e001b 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 0000000..7546fd3 --- /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 -- GitLab