0 13 * * * /home/backup/script/backup.sh
Steht die Zeile genau so in der Crontab?
Ich starte meine Skripte immer mit ./home/backup/script/backup.sh Punkt!
0 13 * * * /home/backup/script/backup.sh
Steht die Zeile genau so in der Crontab?
Ich starte meine Skripte immer mit ./home/backup/script/backup.sh Punkt!
sending incremental file list
Das deutet darauf hin, dass rsync ausgeführt wird. Kannst Du das auf der Gegenseite prüfen? Was genau steht denn im Log von rsync?
Ansonsten würde ich das ganze Verfahren an Deiner Stelle erstmal radikal vereinfachen:
0 13 * * * /home/backup/script/backup.sh
Steht die Zeile genau so in der Crontab?
Ich starte meine Skripte immer mit ./home/backup/script/backup.sh Punkt!
hier ist im script der absolute pfad angegeben.
der punkt bedeutet »current directory« aus der sicht des ausführenden programms.
ich habe das mal mit gekürztem Rsync Kommando ausprobiert.. bei mir klappt das mit "screen -Sdm"
Update:
Hab jetzt weil es mir cron nicht funktionieren wollte, das Skript so abgeändert, dass der Screen permanent läuft und dort jeden Tag um 13 Uhr der rsync Befehl ausgeführt wird.
#!/bin/bash
set -vux
(date && whoami && pwd) > /home/backup/script/testlog.log
datum=$(date +%Y-%m-%d)
# Pfad zur Log-Datei
log_datei="/home/backup/script/logs/log_$datum.txt"
# Funktion, um Nachrichten zu loggen
log_message() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> "$log_datei"
}
# Prüfe, ob der Screen "rsync-backup" existiert
if screen -list | grep -q "rsync-backup"; then
log_message "Screen 'rsync-backup' existiert bereits. Befehl wird nicht ausgeführt."
else
# Starte einen neuen Screen-Session und führe eine Endlosschleife aus
/usr/bin/screen -dmS rsync-backup bash -c "
log_message() {
echo \"\$(date '+%Y-%m-%d %H:%M:%S') - \$1\" | tee -a $log_datei
}
while true; do
current_time=\$(date +\"%H:%M\")
if [ \"\$current_time\" == \"13:30\" ]; then
rsync_command=\"/usr/bin/rsync -azuvPe 'ssh -p 22 -i /root/.ssh/id_ecdsa' --delete --exclude='/var/lib/pterodactyl' --exclude='/proc' --exclude='/sys' --exclude='/mnt' / user@123.123.123.123:/home/user/backup\"
log_message \"Rsync-Befehl wird ausgeführt: \$rsync_command\"
eval \$rsync_command | tee -a $log_datei 2>&1
log_message \"Rsync-Befehl wurde ausgeführt\"
sleep 60 # Warte eine Minute, um Doppelstarts zu vermeiden
else
sleep 30 # Prüfe alle 30 Sekunden die Zeit
fi
done
"
log_message "Neuer Screen 'rsync-backup' erstellt und Endlosschleife gestartet."
fi
Alles anzeigen
Das Löschen von Logs die älter als 30 Tage alt sind, hab ich jetzt in ein anderes Skript gepackt und das wird weiterhin mit cron ausgeführt.
Mir würde es aber den Schlaf rauben, nicht zu wissen wo der Fehler lag immernoch liegt.
Mir auch.. ich habe auf Ubuntu das Script wie es ist genommen, die Pfade angepasst, einen 1 Minuten Cron erstellt und rsync auf /home/bla/Pictures zu /home/bla/Pictures2 gekürzt. mit Screen -d -m und screen -dmS funktioniert es wie es soll.
Es wird gesynct, die Logdateien werden erstellt/gelöscht und die screen session beendet sich nach jedem Aufruf.
Hab ich irgendwas überlesen?