Initial commit
This commit is contained in:
commit
b39cea622a
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
repos
|
124
bup-sync-trigger.sh
Executable file
124
bup-sync-trigger.sh
Executable file
@ -0,0 +1,124 @@
|
||||
#!/bin/bash -e
|
||||
|
||||
# Parse CLI and set options
|
||||
repoFile="$(dirname "$0")/repos"
|
||||
dryRun=''
|
||||
|
||||
varDir=/var/lib/bup-backup-trigger
|
||||
triggerFile="$varDir/trigger"
|
||||
lockFile="$varDir/lock"
|
||||
log="/var/log/bup-sync.log"
|
||||
|
||||
mkdir -p "$varDir"
|
||||
|
||||
while [ $# -gt 0 ]
|
||||
do
|
||||
case "$1" in
|
||||
--repos|-r)
|
||||
repoFile="$2"
|
||||
shift
|
||||
;;
|
||||
--dry|--dry-run|-d)
|
||||
dryRun=y
|
||||
;;
|
||||
--lock)
|
||||
touch "$lockFile"
|
||||
exit 0
|
||||
;;
|
||||
--unlock)
|
||||
rm -f "$lockFile"
|
||||
exit 0
|
||||
;;
|
||||
--log)
|
||||
log="$2"
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
echo "Cannot understand parameter \"$1\". Aborting." >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
if [ "$log" != '-' ]
|
||||
then
|
||||
exec >> "$log"
|
||||
fi
|
||||
|
||||
# Do some safety checks
|
||||
|
||||
if [ ! -r "$repoFile" ]
|
||||
then
|
||||
echo "Cannot read the file $repoFile. Exiting" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -f "$lockFile" ]
|
||||
then
|
||||
echo "The lock file exists. Skipping for now ($(date))"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Define the needed functions
|
||||
|
||||
getNextDate() {
|
||||
python << EOF
|
||||
import datetime
|
||||
|
||||
now = datetime.date.today()
|
||||
weekday = now.weekday()
|
||||
oneDay = datetime.timedelta(days=1)
|
||||
mondayThisWeek = now - oneDay * weekday
|
||||
mondayNextWeek = mondayThisWeek + oneDay * 7
|
||||
dt = datetime.datetime.fromisoformat(mondayNextWeek.isoformat())
|
||||
dt = dt.replace(hour=4, minute=45)
|
||||
print(int(dt.astimezone(datetime.timezone.utc).timestamp()))
|
||||
EOF
|
||||
}
|
||||
|
||||
updateTriggerFile() {
|
||||
getNextDate > "$triggerFile"
|
||||
}
|
||||
|
||||
triggerLiesInPast() {
|
||||
if [ ! -f "$triggerFile" ]
|
||||
then
|
||||
return 0
|
||||
fi
|
||||
|
||||
local now=$(date +%s)
|
||||
local triggered=$(cat "$triggerFile")
|
||||
if [ $now -gt "$triggered" ]
|
||||
then
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
if ! triggerLiesInPast
|
||||
then
|
||||
echo "The timestamp in the trigger event lies in the future. Waiting further."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo "The backup script is triggered."
|
||||
|
||||
while read line
|
||||
do
|
||||
echo "Processing line $line"
|
||||
if [ -n "$dryRun" ]
|
||||
then
|
||||
echo "Shipping to call script $line as in dry mode."
|
||||
else
|
||||
$line
|
||||
fi
|
||||
done <<< $(cat "$repoFile" | grep -v '^#' | sed '/^\W*$/d')
|
||||
|
||||
if [ -n "$dryRun" ]
|
||||
then
|
||||
echo "Not updating the trigger timestamp. The value would be $(getNextDate)."
|
||||
else
|
||||
updateTriggerFile
|
||||
fi
|
4
repos.dist
Normal file
4
repos.dist
Normal file
@ -0,0 +1,4 @@
|
||||
# This is a list of all scripts to synchronize the backups
|
||||
# An example would be:
|
||||
/backup/server/sync.sh
|
||||
/backup/cloud/sync.sh
|
Loading…
Reference in New Issue
Block a user