Mit diesem Skript lasse ich die 2-Stunden-Sicherungen zu einem gepackten File zusammenfassen.
Mit einem Editor das File minecraft_tagessicherung erstellen. Ich habe es unter /home/minecraft/bin/ gespeichert.
mkdir -p /home/minecraft/bin/;nano /home/minecraft/bin/minecraft_tagessicherung
#!/bin/bash
# ---------------------------------------------------------------------------
# minecraft_tagessicherung - Fasst die 2h-Sicherungen zu einer Tagessicherung zusammen
# Copyright 2017, Christian Müller christian.mueller@elektro-fred.de
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License at <http://www.gnu.org/licenses/> for
# more details.
# Usage: minecraft_tagessicherung [-h|--help]
# Revision history:
# 2016-11-19 Created by new_script ver. 3.3
# ---------------------------------------------------------------------------
PROGNAME=${0##*/}
VERSION="1.0"
clean_up() { # Perform pre-exit housekeeping
return
}
error_exit() {
echo -e "${PROGNAME}: ${1:-"Unknown Error"}" >&2
clean_up
exit 1
}
graceful_exit() {
clean_up
exit
}
signal_exit() { # Handle trapped signals
case $1 in
INT)
error_exit "Program interrupted by user" ;;
TERM)
echo -e "\n$PROGNAME: Program terminated" >&2
graceful_exit ;;
*)
error_exit "$PROGNAME: Terminating on unknown signal" ;;
esac
}
usage() {
echo -e "Usage: $PROGNAME [-h|--help]"
}
help_message() {
cat <<- _EOF_
$PROGNAME ver. $VERSION
Fasst die 2h-Sicherungen zu einer Tagessicherung zusammen
$(usage)
Options:
-h, --help Display this help message and exit.
_EOF_
return
}
# Trap signals
trap "signal_exit TERM" TERM HUP
trap "signal_exit INT" INT
# Parse command-line
while [[ -n $1 ]]; do
case $1 in
-h | --help)
help_message; graceful_exit ;;
-* | --*)
usage
error_exit "Unknown option $1" ;;
*)
echo "Argument $1 to process..." ;;
esac
shift
done
# Main logic
# lock dirs/files
LOCKDIR="/run/lock/minecraft_tagessicherung"
PIDFILE="${LOCKDIR}/minecraft_tagessicherung.pid"
# exit codes and text
ENO_SUCCESS=0; ETXT[0]="ENO_SUCCESS"
ENO_GENERAL=1; ETXT[1]="ENO_GENERAL"
ENO_LOCKFAIL=2; ETXT[2]="ENO_LOCKFAIL"
ENO_RECVSIG=3; ETXT[3]="ENO_RECVSIG"
###
### start locking attempt
###
trap 'ECODE=$?; echo "[statsgen] Exit: ${ETXT[ECODE]}($ECODE)" >&2' 0
echo -n "[statsgen] Locking: " >&2
if mkdir "${LOCKDIR}" &>/dev/null; then
# lock succeeded, install signal handlers before storing the PID just in case
# storing the PID fails
trap 'ECODE=$?;
echo "[statsgen] Removing lock. Exit: ${ETXT[ECODE]}($ECODE)" >&2
rm -rf "${LOCKDIR}"' 0
echo "$$" >"${PIDFILE}"
# the following handler will exit the script upon receiving these signals
# the trap on "0" (EXIT) from above will be triggered by this trap's "exit" command!
trap 'echo "[statsgen] Killed by a signal." >&2
error_exit ${ENO_RECVSIG}' 1 2 3 15
echo "success, installed signal handlers"
else
# lock failed, check if the other PID is alive
OTHERPID="$(cat "${PIDFILE}")"
# if cat isn't able to read the file, another instance is probably
# about to remove the lock -- exit, we're *still* locked
# Thanks to Grzegorz Wierzowiecki for pointing out this race condition on
# http://wiki.grzegorz.wierzowiecki.pl/code:mutex-in-bash
if [ $? != 0 ]; then
echo "lock failed, PID ${OTHERPID} is active" >&2
error_exit ${ENO_LOCKFAIL}
fi
if ! kill -0 $OTHERPID &>/dev/null; then
# lock is stale, remove it and restart
echo "removing stale lock of nonexistant PID ${OTHERPID}" >&2
rm -rf "${LOCKDIR}"
echo "[statsgen] restarting myself" >&2
exec "$0" "$@"
else
# lock is valid and OTHERPID is active - exit, we're locked!
echo "lock failed, PID ${OTHERPID} is active" >&2
error_exit ${ENO_LOCKFAIL}
fi
fi
export TERM=${TERM:-dumb}
ZEIT=$(date +"%d-%m-%Y")
slack server Minecraft: $(date +"%G-%m-%d %H:%M:%S") Start Tagessicherung.
tar czPf /mnt/minecraft_backup/$(date +"%Y-%m-%d")_minecraft_Tagessicherung.tar.gz /mnt/minecraft_backup/$(date +"%d-%m-%Y")
rm /mnt/minecraft_backup/$ZEIT/*
slack server Minecraft: $(date +"%G-%m-%d %H:%M:%S") Tagessicherung beendet.
graceful_exit
Danach noch ausführbar machen.
chmod +x /home/minecraft/bin/minecraft_tagessicherung