Rsync Skript und Cron

  • Hi,

    ich habe mir hier ein kleines rsync Backup Skript angefertigt und wollte, dass es täglich um 13 Uhr ausgeführt wird.

    Um 13 Uhr wird es zwar ausgeführt, aber der rsync Befehl im Skript wird ignoriert und es wird nur eine Logdatei mit den log Nachrichten erstellt.

    Weiß jemand was ich verändern müsste, damit der rsync Befehl richtig ausgeführt wird?

    Skript:

    Cronjob:

    Code
    0 13 * * * /home/backup/script/backup.sh
  • Versuche mal den Fehler einzugrenzen, indem du ein Skript nimmst, in dem du alles andere weglässt und nur rsync ausgeführst ohne screen.

    Also nur:

    Code
    /usr/bin/rsync -azuvPe 'ssh -oPort=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
  • Funktioniert's schon?

    Falls nicht empfehle ich ebenfalls das Debugging zu aktivieren. Bis zum Wochenende war mir das gar nicht bekannt und dank den Mitgliedern dieses Forums konnte ich meinen Fehler (falsche Pfadzuweisung) finden.

    Einfach im Skript das Debugging ergänzen:

    Bash
    #!/bin/bash
    set -vux

    danach das Skript manuell starten

    Code
    sh backup.sh

    und dadanach mit einem zeitlich passenden Cron starten

    Code
    * * * * * /home/backup/script/backup.sh > /home/backup/script/cronlog.txt
    (evtl. ist der hintere Teil zum Abspeichern der Debugging-Infos gar nicht nötig, hab' ich nicht getestet...)

    Hierdanach kannst Du die Infos vergleichen und findest so vielleicht den Fehler raus.

    Evtl. bringt Dich auch die zusätzliche Logging-Funktion von rsync weiter, dazu ergänzt Du den rsync-Aufruf am Ende mit

    Code
    rsync -azuvPe blablabla... --log-file=/home/backup/script/rsync-log.log --stats

    In der rsync-log.log-Datei finden sich vielleicht auch sinnvolle Infos.

    Das Zertifikat für die externe Maschine kannst Du übrigens lokal einfach in der ssh Config eintragen, dann reicht zukünftig einfach die Nennung des externen Ziels (z.B. 123er-Server) und der Rest wird automatisch abgearbeitet. Wird so deutlich einfacher wenn Du verschiedene Skripte hast und immer die gleiche Verbindung nutzen willst. Die Konfiguration erfolgt dann (z.B. bei einem Umzug oder Neuinstallation) nur einmal in der SSH Config.

    Viel Erfolg! :S

  • Code
    $rsync_command

    sollte das nicht ${rsync_command} innerhalb von Anführungszeichen sein?

    Vielleicht so?

    Code
      rsync_command="/usr/bin/rsync -azuvPe 'ssh -oPort=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"
  • Mach das doch bitte mal mit `bash -x` hinter dem Shebang, vielleicht wird dann schon klar, was passiert.

    Hat leider nichts verändert bzw. keinen Hinweise geliefert

    und dadanach mit einem zeitlich passenden Cron starten

    Das Loggen des Crons selbst hat "Must be connected to a terminal." als Fehler geworfen, also hab ich schnell bash genommen. Jetzt kommt der Fehler im Cronlog zwar nicht mehr, funktionieren tut das Skript aber trotzdem nicht richtig, es wird auch kein rsync-log erstellt :/

    sollte das nicht ${rsync_command} innerhalb von Anführungszeichen sein?

    Habs mal von $rsync_command zu ${rsync_command} geändert, aber es hat sich nichts verändert :/

  • Warum nimmst Du eigentlich /usr/bin/rsync ?

    Ich installiere immer mit sudo apt install rsync auf neuen Maschinen und musste noch nie einen Pfad zu Programmen angeben.

    Da rsync bei Dir keine Logdatei erstellt, startet es offensichtlich wirklich nicht (außer es gibt irgendwelche fehlenden Schreibrechte für die Logdatei?).

    Hast Du das hier schon gemacht?

    Versuche mal den Fehler einzugrenzen, indem du ein Skript nimmst, in dem du alles andere weglässt und nur rsync ausgeführst ohne screen.

    Code
    Code...

    Shebang kannst Du da noch davor setzen.

    Falls das Debugging nix nützt schadet vielleicht auch eine zusätzliche Ausgabe nicht:

    Code
    (date && whoami && pwd) > /home/backup/script/testlog.log

    Irgendwie musst Du das eingrenzen.

  • Lass uns doch mal draufgucken. Ggf vorher geheime Infos entfernen.

    Manuell ausgeführt kommt folgendes:

    Im Screen:

    Code
    + /usr/bin/rsync -azuvPe 'ssh -oPort=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-file=/home/backup/script/rsync-log.log --stats
    + tee -a /home/backup/script/logs/log_2024-07-05.txt
    sending incremental file list

    Außerhalb des Screens:

    Warum nimmst Du eigentlich /usr/bin/rsync ?

    War nur eine Lösung die ich auf StackOverflow gelesen habe

    Hast Du das hier schon gemacht?

    Jup, habe weiter oben auch schon geantwortet dass es da auch nicht funktioniert. Habe auch online viel gelesen dass rsync und cron anscheinend Probleme macht

    Falls das Debugging nix nützt schadet vielleicht auch eine zusätzliche Ausgabe nicht:

    Fr 5. Jul 19:09:01 CEST 2024

    root

    /root

  • Hast Du das hier schon gemacht?

    Jup, habe weiter oben auch schon geantwortet dass es da auch nicht funktioniert.

    Dann macht es nicht viel Sinn das ganze Skript weiter zu testen, sondern du muss an dieser Stelle ansetzen und dort noch weiter vereinfachen.

    rsync wird ja dann, auch ohne das ganze Drumherum schon nicht ausgeführt.

  • cron hat evtl. nicht ausreichende suchpfade gesetzt.

    der hinweis dazu kam ja schon in #9 von H6G , wurde aber leider ignoriert.

    damit dein script mit cron funktioniert, muss entweder PATH ordentlich gesetzt sein oder du verwendest durchgehend für alle apps die kompletten pfade.

    also such dir entweder die pfade zu screen, grep, tee etc. ebenfalls raus oder setze die entsprechende PATH an den anfang deiner crontab.

    achte auf korrektes (funktionierendes) quoting.

    warum muss das backup-script im screen laufen?

    »Hauptsache BogoMIPS!«
    Volksfront DLT #64Ksplit
    Sag' NEIN zu Wordpress

    3 Mal editiert, zuletzt von Olivetti (5. Juli 2024 um 20:26)

  • @Michelle : Wenn $log_datei auch Fehlermeldungen von $rsync_command in Zeile 24 des ursprünglichen Scripts beinhalten soll, dann steht "2>&1" auf der falschen Seite des Pipe-Symbols, weil es sich derzeit auf "tee" bezieht.

    VServer IOPS Comparison Sheet: https://docs.google.com/spreadsheets/d/1w38zM0Bwbd4VdDCQoi1buo2I-zpwg8e0wVzFGSPh3iE