systemd Backup-Service

Hinweis: In dem Thema systemd Backup-Service gibt es 44 Antworten auf 5 Seiten. Der letzte Beitrag () befindet sich auf der letzten Seite.
  • Hallo liebe Forengemeinde,


    wir setzen im Verein eine Software ein, die auf 13.2 oder 42.2 läuft. Bisher hatten wir 13.2 im Einsatz und die Daten nicht gesichert 8o8)
    Jetzt haben wir kürzlich einen neuen PC angeschafft und würden bei der Gelegenheit auf 42.2 updaten und gerne automatische Backups der relevanten Daten erstellen.


    Die Idee war durch einen systemd-Service beim Herunterfahren ein Skript ausführen zu lassen, das dann die Daten sichert. Es gibt folgende Anforderungen:
    - Ausführung beim Herunterfahren, aber nicht beim Reboot
    - Sicherung per LAN auf ein NAS
    - Skript kann/ soll auch das Zielverzeichnis mounten und unmounten
    - Ausführung nachdem mysql beendet wurde, aber bevor das Netzwerk deaktiviert wird


    Zu diesem Zweck habe ich folgenden Service erstellt:

    Das ExecStart würde ich dann später durch ExecStart=/bin/true ersetzen.


    Das zugehörige Skript backup-data.sh beinhaltet folgendes:

    Bash
    #!/bin/bash
    echo "$(date) test $@" >> /home/backup/test.txt
    exit 0


    Beim Hochfahren wird das Skript ausgeführt und die Datei mit Inhalt [Datum] test start erstellt, aber beim Neustarten oder Herunterfahren anscheinend nicht, denn der Inhalt der Datei ändert sich dann nicht mehr. Ich habe schon verschiedenste Varianten durch, aber leider alle ohne Erfolg.


    Was mache ich falsch?

    Für den Inhalt des Beitrages 114171 haftet ausdrücklich der jeweilige Autor: myscha

  • Warum nimmst du nicht z.B. backintime oder direkt rsync?

    Für den Inhalt des Beitrages 114172 haftet ausdrücklich der jeweilige Autor: Sauerland

  • rsync wollte ich nehmen, eben manuell innerhalb des Skripts. Gibt es da noch ne bessere Lösung, oder wie meintest du das?


    backintime kenne ich nicht. Kann ich das so einrichten, dass es beim Herunterfahren sichert? Also nicht beim Reboot und nicht zwischendurch.

    Einmal editiert, zuletzt von myscha ()

    Für den Inhalt des Beitrages 114173 haftet ausdrücklich der jeweilige Autor: myscha

  • backintime kannst du bei jedem Systemstart ein Backup machen lassen, beruht auf rsync.


    backintime-qt ist die Gui dafür.


    Das wird über cron bzw. systemd.timers gesteuert.

    Für den Inhalt des Beitrages 114174 haftet ausdrücklich der jeweilige Autor: Sauerland

  • Und nur als Anregung:
    Ich würde sofort Leap 42.3 nehmen und nicht 42.2.........

    Für den Inhalt des Beitrages 114175 haftet ausdrücklich der jeweilige Autor: Sauerland

  • Mir wäre es lieber beim Herunterfahren. Ich wollte das mysql-Verzeichnis sichern und beim Hochfahren soll die Kiste aber gleich einsatzbereit sein und dafür muss mysql laufen.


    42.3 wird offiziell von der Software nicht unterstützt, d.h. da habe ich dann keinen Support vom Hersteller mehr...

    Für den Inhalt des Beitrages 114176 haftet ausdrücklich der jeweilige Autor: myscha

  • 42.3 wird offiziell von der Software nicht unterstützt, d.h. da habe ich dann keinen Support vom Hersteller mehr...

    Kannst du auch sagen, um welche Software es sich handelt?

    Für den Inhalt des Beitrages 114177 haftet ausdrücklich der jeweilige Autor: Sauerland

  • Achso, klar. Den 'ShootmasterII' von Meyton. Ich dachte nicht, dass es für die Fragestellung relevant ist.

    Für den Inhalt des Beitrages 114178 haftet ausdrücklich der jeweilige Autor: myscha

  • Was mache ich falsch?

    So ziemlich alles.


    Du weist mit After=network.target einen Job, den du nirgends startest, an, erst dann zu laufen, wenn das Netzwerk verfügbar ist. Was beim Hochfahren ist.
    Laut deiner Beschreibung möchtest du aber einen Job starten bevor das Netzwerk nicht mehr verfügbar ist. Was beim Herunterfahren Sache ist.
    Und eigentlich möchtest du, dass der Job läuft bevor MySQL down geht. Was implizit stattfindet bevor das Netzwerk still gelegt wird.


    Dann gibst du im alten SystemV Init Style zwei Parameter namens start und stop beim Aufruf an.
    Das tut zwar nur mir weh, weil das gerufene Script diese Argumente nicht auswertet.
    Aber mir zeigt es, dass du munter die alte InitV Schiene mit dem modernen systemd mischt.


    Du willst ein Before=shutdown.target mit einem After=mysqlShutdown (oder wie auch immer das heißt; ich setze kein MySQL ein)


    Das start stop mag für wo am nötigsten sein; hier aber sinnlos. Auch wenn es egal ist; schlechter Stil ist es allemal.
    Es sei denn, dein Script würde das wirklich auswerten.
    Du schweigst ja zu dem eigentlichen Script, was nicht sonderlich hilfreich ist.
    Auch späteres Einsetzen von Fehlern hilft dir nicht wirklich weiter.
    (Und es riecht jetzt schon nach Fehlern)


    Das multiuser.target will garantiert nichts mit deinem Shutdownbackupscript zu tun haben. Hat es auch nicht.
    Echt nicht.
    Das macht eigentlich nur beim Hochfahren Sinn, oder wenn du das Runlevel ändern möchtest.
    Beides trifft auf deinen Backup sicher nicht zu.

  • @Berichtigung
    Danke für deine Kritik. Wie ich sehe, war meine Beschreibung nicht ganz vollständig.


    start und stop dienen mir aktuell nur zum Debuggen, damit ich sehe wann das Skript ausgeführt wurde. Mit dem eigentlichen Backup-Skript hat das natürlich nichts zu tun, das ist richtig. Aber genausowenig hat das eigentliche Backup-Skript etwas mit meinem aktuellen Problem zu tun - nämlich das Skript im gewünschten Moment zu starten.


    Mit SystemV hatte ich nie zu tun, und auch keine Ahnung davon.


    Meine Anforderungen:
    - Ausführung beim Herunterfahren, aber nicht beim Reboot
    - Sicherung per LAN auf ein NAS, also Netzwerk und NFS-Mounts müssen noch verfügbar sein
    - Skript kann/ soll das Zielverzeichnis mounten und unmounten
    - Ausführung nachdem mysql beendet wurde


    Ich hatte systemd bisher so verstanden, dass man die Reihenfolge von Prozessen/ Diensten beim Hochfahren festlegt und diese dann beim Herunterfahren in genau umgekehrter Reihenfolge wieder beendet werden. Daher die Reihenfolge mit dem After und Before, das Skript würde dann ausgeführt wenn mysql beendet wurde, aber das Netzwerk noch aktiv ist.


    Ich habe auch mit WantedBy=poweroff.target experimentiert, aber auch das leider ohne Erfolg.

    Für den Inhalt des Beitrages 114182 haftet ausdrücklich der jeweilige Autor: myscha