Compare commits
No commits in common. "c9bf7c96ffd20574388dd275a9e4eb821a23ca6e" and "a655a7db4c7e21a9921796e061868db49947147a" have entirely different histories.
c9bf7c96ff
...
a655a7db4c
@ -1,67 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# === IMPORTS ===
|
|
||||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
||||||
source "$SCRIPT_DIR/../Utility/Lock.sh"
|
|
||||||
source "$SCRIPT_DIR/../Utility/Log.sh"
|
|
||||||
|
|
||||||
# === Hilfe-Seite ===
|
|
||||||
if [[ "$*" == *"-h"* ]] || [[ "$#" -ne 3 ]]; then
|
|
||||||
echo "Benutzung: $0 <SYNC_NAME> <DIR1> <DIR2>"
|
|
||||||
echo
|
|
||||||
echo "Optionen:"
|
|
||||||
echo " -h Zeigt diese Hilfenachricht an"
|
|
||||||
echo " SYNC_NAME Der Name dieser Synchronisation"
|
|
||||||
echo " DIR1 Der absolute Dateipfad eines Synchronisationsordners"
|
|
||||||
echo " DIR2 Der absolute Dateipfad eines Synchronisationsordners"
|
|
||||||
echo
|
|
||||||
echo "Folgende Pakete müssen installiert sein: unison"
|
|
||||||
echo
|
|
||||||
echo "Dieses Skript synchronisiert zwei Ordner miteinander."
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
# === Variablen ===
|
|
||||||
SYNC_NAME="$1"
|
|
||||||
DIR1="$2"
|
|
||||||
DIR2="$3"
|
|
||||||
|
|
||||||
# === TRAP EINRICHTEN ===
|
|
||||||
# Signalbehandlung einrichten, um Lock-Datei bei Abbruch zu entfernen
|
|
||||||
trap "trap_remove_lock '$SYNC_NAME'" SIGINT SIGTERM
|
|
||||||
|
|
||||||
# === LOCK-FILE ERSTELLEN ===
|
|
||||||
# Lock-Datei erstellen, um parallele Ausführungen zu verhindern
|
|
||||||
create_lock "$SYNC_NAME"
|
|
||||||
|
|
||||||
# Prüfen, ob Unison installiert ist, und es bei Bedarf installieren
|
|
||||||
if ! command -v unison &>/dev/null; then
|
|
||||||
echo "Unison ist nicht installiert. Installiere..."
|
|
||||||
sudo apt update && sudo apt install -y unison |& while IFS= read -r line; do log "$line"; done
|
|
||||||
fi
|
|
||||||
|
|
||||||
# === Hauptskript ===
|
|
||||||
|
|
||||||
# Synchronisationsdatei nur erstellen, wenn sie noch nicht existiert
|
|
||||||
SYNC_FILE="$HOME/.unison/$SYNC_NAME.prf"
|
|
||||||
if [[ ! -f "$SYNC_FILE" ]]; then
|
|
||||||
echo "Erstelle Standard-Unison-Profil..."
|
|
||||||
mkdir -p "$(dirname "$SYNC_FILE")"
|
|
||||||
cat <<EOF >"$SYNC_FILE"
|
|
||||||
root = $DIR1
|
|
||||||
root = $DIR2
|
|
||||||
|
|
||||||
auto = true
|
|
||||||
batch = true
|
|
||||||
EOF
|
|
||||||
else
|
|
||||||
echo "Unison-Profil existiert bereits: $SYNC_FILE"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Unison ausführen, um die Synchronisation durchzuführen
|
|
||||||
echo "Starte Synchronisation mit Unison..."
|
|
||||||
unison $SYNC_NAME |& while IFS= read -r line; do log "$line"; done
|
|
||||||
|
|
||||||
# === LOCK-FILE ENTFERNEN ===
|
|
||||||
# Lock-Datei entfernen, um die Ausführung freizugeben
|
|
||||||
remove_lock "$SYNC_NAME"
|
|
||||||
@ -5,37 +5,21 @@ if [[ ! -w "$LOCK_DIR" ]]; then
|
|||||||
LOCK_DIR="/tmp" # Fallback für benutzerspezifische Locks
|
LOCK_DIR="/tmp" # Fallback für benutzerspezifische Locks
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Funktion zur Erstellung des Lock-Dateinamens
|
LOCK_FILE="$LOCK_DIR/$(basename "$0").lock"
|
||||||
get_lock_file() {
|
|
||||||
local suffix="$1"
|
|
||||||
if [[ -n "$suffix" ]]; then
|
|
||||||
echo "$LOCK_DIR/$(basename "$0")_$suffix.lock"
|
|
||||||
else
|
|
||||||
echo "$LOCK_DIR/$(basename "$0").lock"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
create_lock() {
|
create_lock() {
|
||||||
local suffix="$1"
|
if [[ -e "$LOCK_FILE" ]]; then
|
||||||
local lock_file
|
log "Ein anderer Prozess läuft bereits. Lock-File gefunden: $LOCK_FILE"
|
||||||
lock_file=$(get_lock_file "$suffix")
|
|
||||||
|
|
||||||
if [[ -e "$lock_file" ]]; then
|
|
||||||
log "Ein anderer Prozess läuft bereits. Lock-File gefunden: $lock_file"
|
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
touch "$lock_file"
|
touch "$LOCK_FILE"
|
||||||
log "Lock-File erstellt: $lock_file"
|
log "Lock-File erstellt: $LOCK_FILE"
|
||||||
}
|
}
|
||||||
|
|
||||||
remove_lock() {
|
remove_lock() {
|
||||||
local suffix="$1"
|
if [[ -e "$LOCK_FILE" ]]; then
|
||||||
local lock_file
|
rm -f "$LOCK_FILE"
|
||||||
lock_file=$(get_lock_file "$suffix")
|
log "Lock-File entfernt: $LOCK_FILE"
|
||||||
|
|
||||||
if [[ -e "$lock_file" ]]; then
|
|
||||||
rm -f "$lock_file"
|
|
||||||
log "Lock-File entfernt: $lock_file"
|
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -17,11 +17,6 @@ log() {
|
|||||||
touch "$LOGFILE"
|
touch "$LOGFILE"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Prüfen, ob der Benutzer der Besitzer des Verzeichnisses ist
|
|
||||||
if [ -d "$LOGDIR" ] && [ -O "$LOGDIR" ]; then
|
|
||||||
chmod -R 777 "$LOGDIR"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if is_interactive; then
|
if is_interactive; then
|
||||||
# Interaktive Shell
|
# Interaktive Shell
|
||||||
echo "$(date +'%Y-%m-%d %H:%M:%S') - $1" | tee -a "$LOGFILE" >/dev/tty
|
echo "$(date +'%Y-%m-%d %H:%M:%S') - $1" | tee -a "$LOGFILE" >/dev/tty
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user