Stern inaktivStern inaktivStern inaktivStern inaktivStern inaktiv
 

Es besteht die Möglichkeit eigene Codeerweiterungen vor und nach dem Backupprozess des Scripts einzubinden. Dieses ist sinnvoll, wenn eigentlich Änderungen im Backupscript notwendig sind aber dann natürlich nach jedem Update von raspiBackup auf eine neue Version wieder neu eingepflegt werden müssen. Die Extensions (Plugins) sind unabhängig vom jeweiligen Codestand von raspiBackup und deshalb in diesem Falle zu empfehlen.

Verschiedene Plugins stehen zur Verfügung und dienen als Beispiele für eigene Erweiterungen. Durch die ersten wird  die CPU Temperatur sowie die Hauptspeicher- und Backuppartitionsbelegung sowie die Partitionsbelegung vor und nach dem Backup ausgegeben. Die letzte Erweiterung wird nur am Ende des Backups aufgerufen und kann bei Erfolg bzw Misserfolg des Backups unterschiedliche Aktionen auslösen.

Wer nützliche Plugins für die Community erstellt hat kann sie gerne hier in einem Kommentar beschreiben und die Downloadlocation nennen. Sollten Fähigkeiten der Plugins fehlen einfach einen Kommentar dazu hier hinterlassen und ich prüfe in wieweit die fehlende Funktion eingepflegt werden kann.

 

Namenskonvention

Die Plugins muessen einem bestimmten Namensschema folgen. Dieses sieht wie folgt aus:

raspiBackup_<extensionName>_pre.sh und raspiBackup_<extensionName>_post.sh. Das eine Script wird vor und das andere nach dem Backup aufgerufen. Es müssen nicht beide Scripte existieren. Die Konfigurationsvariable EXTENSIONS muss dann <extensionName> enthalten um die Extension zu aktivieren. Selbiges gilt für Restoreplugins die es ab der Release 0.6.7 gibt. Sie werden vor dem Restore und nach dem Restore aufgerufen.

 

Pluginaufrufstellen beim Backup

Die verschiedenen Plugins werden an folgenden Stellen im Backupverlauf aufgerufen:

BEFORE_STOPSERVICES (Definierte Befehle werden ausgeführt)

STOP_SERVICES (Definierte Befehle werden ausgeführt, option -o Parameter)

PRE_BACKUP_EXTENSION

READY_BACKUP_EXTENSION

... erstellen des Backups ...

POST_BACKUP_EXTENSION

START_SERVICES (Definierte Befehle werden ausgeführt, option -a Parameter)

AFTER_STARTSERVICES (Definierte Befehle werden ausgeführt)

Aufräumarbeiten wie das Löschen von obsoleten Backups (kann länger dauern)

FINAL_COMMANDS (ab Release 0.6.8) (Definierte Befehle werden ausgeführt)

Sende eMail und Notifications, Housekeeping

Exit

 

Pluginaufrufstellen beim Restore

(Verfügbar ab Releae 0.6.7)

Die verschiedenen Plugins werden an folgenden Stellen im Restoreverlauf aufgerufen:

PRE_RESTORE_EXTENSION

... restoren des Backups ...

POST_RESTORE_EXTENSION
 

Beispielplugins

 

  1. Der einfachste Weg ist die Beispielplugins mit dem Installer zu installieren und zu aktivieren. Entweder über die Menufolge Installiere Komponenten->Installiere Beispielerweiterungen oder direkt über die Befehlszeile (Benutze die Option -e)
    raspiBackupInstallUI.sh
    oder
    raspiBackupInstallUI.sh -e
  2. Wer die Beispielplugins manuell installieren will kann das tar mit diesem Link mit einem Browser downloaden oder auch direkt wie folgt auf die Raspberry downloaden und nach /usr/local/bin auspacken.
    wget http://www.linux-tips-and-tricks.de/raspiBackupSampleExtensions.tgz -O raspiBackupSampleExtensions.tgz
    tar -xzf raspiBackupSampleExtensions.tgz -C /usr/local/bin

Dadurch werden die folgenden Scripte in /usr/local/sbin kopiert:

1) raspiBackup_mem_pre.sh and raspiBackup_mem_post.sh - Berichtet Memory Usage der Raspberry vor und nach dem Backup

2) raspiBackup_temp_pre.sh and raspiBackup_temp_post.sh - Berichtet die CPU Temperatur der Raspberry vor und nach dem Backup

3) raspiBackup_disk_pre.sh and raspiBackup_disk_post.sh - Berichtet die Plattennutzung vor und nach dem Backup

4) raspiBackup_execute_post.sh - Wird am Ende des Backups aufgerufen. Hilfreich wenn eine eigene Erfolg/Fehler Benachrichtigungsfunktion genutzt werden soll.
 

Um die Plugins zu aktivieren ist noch folgender zusätzlicher Aufrufparameter bei raspiBackup notwendig.

-N "temp mem disk execute"

 bzw in die Konfigurationsdatei ist folgende Zeile aufzunehmen

DEFAULT_EXTENSIONS="temp mem disk execute"

Details zu den Aufrufparametern bzw den Konfigurationsparametern siehe hier

 

Die Plugins erzeugen folgende Meldungen:

--- RBK1001I: Memory usage - Pre backup - Used: 97 MB Free: 130 MB - Post backup - Used: 98 MB Free: 121 MB
--- RBK1000I: CPU temperature pre and post backup: 53.2'C - 55.8'C
--- RBK1002I: Disk usage pre backup: Used: 1.30 TiB Free: 2.18 TiB
--- RBK1003I: Disk usage post backup: Used: 1.30 TiB Free: 2.18 TiB
--- RBK1004I: Free change: -256.00 KiB (0.00 %)

 

Meldungen

Die Beispielplugins benutzen Meldungen die ab dem Nummernbereich 1000 beginnen wie z.B. RBK1000I. Wer eigene Plugins erstellt sollte sofern sie Meldungen schreiben diese bei 2000 beginnen lassen und nicht den Bereich unter 1999 benutzen.

 

Interface

Das Plugin bekommt im Aufruf den aktuellen Statuscode von raspiBackup mitgegeben. Ein Statuscode von 0 bedeutet in den Postplugins der Backup war erfolgreich. Jeder andere Statuscode bedeutet dass der Backup beendet wurde.

 

eMailPlugin

Ab der Version 0.6.1.1 gibt es ein emaiPlugin D.h. man kann die emailVersendung selbst programmieren. Das ist dann besonders hilfreich, wenn die vom Script unterstützen eMailProgramme den eigenen eMailClient nicht unterstützen. Ausserdem kann das Aussehen der eMail beliebig geändert werden. Eine Beispielplugins die mailx benutzt befindet sich in den Beispielplugins.

Das Mailplugin wird dadurch aktiviert, dass für den Parameter -s mailext definiert wird. Dann wird das Mailplugin mit dem Namen raspiBackup_mail.sh aufgerufen, die dann den Mailversand vornehmen muss. Die folgenden Parameter werden dem Mailplugin Script übergeben:

email="$1"        # target email address
subject="$2"      # email subject
content="$3"      # email contents
parms="$4"        # addtl email parms passed with -E
append="$5"       # file to append

Wenn jemand ein eMailPlugin schreibt wäre es gut wenn dieses Plugin in einem Kommentar am Ende dieser Seite erläutert wird so dass der Code vielleicht mit anderen ausgetauscht werden kann.

 

Hinweise

1) Achtung: Die Extensions laufen mit root Rechten und können deshalb bei Fehlern das laufende System schädigen oder sogar zerstören !

2) Es sind nicht beide Scripts (pre und post) notwendig. Es reicht wenn eines existiert.

3) Zum Testen von Plugins ist der Parameter -F sehr hilfreich. Dadurch wird der eigentliche Backupprozess übersprungen und somit der Scriptdurchlauf sehr schnell.

4) Der Rückgabewert des Backupprozesses wird an das Plugin als Parameter weitergereicht. 0 <=> OK, <>0 Fehler

5) Da die Plugin im Scope von raspiBackup aufgerufen werden, besteht Zugriff auf interne Scriptvariablen. Davon ist abzuraten, da sich die Internas jederzeit ändern können. Aus diesem Grunde ist es auch ratsam eigene Variablen mit einem pluginspzifischen Prefix zu versehen umd mögliche Konflikte mit Variablennamen die von raspiBackup benutzt werden zu vermeiden.

5) Wenn jemand seinen Plugincode sharen möchte geht das einfach über einen Pullrequest auf github. Dort ist aller Plugins im Quellcode verfügbar um ihn zu erweitern und neuen zuzufügen.

Kommentar schreiben

*** Hinweis ***

Kommentare sind erwünscht. Aber um lästige Spamposts abweisen zu können gibt es ein paar Dinge die zu beachten sind:
  1. Kommentare mit dem Text http werden sofort zurückgewiesen mit der Meldung Sie sind nicht berechtigt den Tag zu verwenden. zz
  2. Kommentare werden manuell überprüft und es dauert deshalb in der Regel einen Tag bis sie veröffentlicht werden.

    Kommentare   
    #22 framp 2024-02-08 16:15
    Nein. Überschrieben wird sie nicht. Höchstes durch neue Optionen erweitert. Du kannst also unbesorgt die Konfi auch in zukünftigen Releases ohne Updates nutzen ;-)
    Zitieren
    #21 NormalZeit 2024-02-08 15:56
    zitiere framp:
    ... die Option dynamicMount an ;-)


    Hi Framp,

    Danke für den super Tipp! Klappt einwandfrei. Hab's jetzt direkt in die /usr/local/etc/raspiBackup.conf eingetragen. Frage dazu: Wenn es ein Update von raspiBackup gibt, wird dann die .conf überschrieben?

    Grüße – NormalZeit

    P.S.: Die optionalen Beispiel-Extensions raspiBackup_temp_pre & post funktionieren am Raspberry 4 nicht.
    Zitieren
    #20 framp 2024-02-08 02:19
    Moin NormalZeit,

    das geht einfacher. Die Dir mal die Option dynamicMount an ;-)

    CU framp
    Zitieren
    #19 NormalZeit 2024-02-07 22:22
    Hallo Framp,

    Danke für das tolle Backup und Restore Programm, läuft bei mir einwandfrei auf mehreren Raspberry 4 Rechnern unter Ubuntu mit rsync auf einen NFS-Share. Bisher habe ich es nur manuell aufgerufen, möchte es jetzt aber automatisch einrichten an zwei Wochentagen.
    Dazu müsste aber vor dem Start der NFS-Share gemountet werden und am Ende wieder entmountet. Dazu reicht ein „mount /mnt/SalzNAS“ bzw. „umount /mnt/SalzNAS“ (geht auch als normaler User.
    Mir ist jetzt aber nicht klar, in welches der Scripte unter /usr/local/bin ich das eintragen kann, und ob das nach einem möglichen Update von raspiBackup nicht wieder überschrieben wird.
    Zitieren
    #18 framp 2021-10-14 12:01
    Moin Micha,

    da ist mir beim Bauen der neuen Version ein kleiner Fehler unterlaufen :oops: Siehe auch HTTPS://github.com/framps/raspiBackup/issues/376.

    Wenn Du es jetzt noch einmal probierst wird die Installation nicht mehr abbrechen :-)

    Cu framp
    Zitieren
    #17 Micha 2021-10-14 10:42
    Hallo,
    ich habe mir das Tool gerade installiert, und einmal deinstalliert, da etwas mit der Telegram Benachrichtigung nicht funktionierte. Wenn ich jetzt die Erweiterungen installieren möchte, bricht das immer ab mit dem Fehlercode
    RBI0018E und dem Hinweis auf chmod. Zu dem Fehlercode habe ich leider nicht gefunden und das besagte Logfile : raspiBackupInstallUI.log, finde ich leider auch nicht auf dem Raspi
    kannst Du mir vielleicht einen Tip geben ?

    Vielen Dank und Viele Grüße
    Micha
    Zitieren
    #16 framp 2021-09-20 22:22
    Hello Dave,

    according #13 you misconfigured somehow the extensions. Without the debug log I cannot help you to find the root cause for your issue.

    Cu framp
    Zitieren
    #15 Dave Neill 2021-09-20 22:19
    I should have noted, I tried getting them with the installer first. I will upgrade to 0.6.6 and see if it works then. I will keep an eye out here in case you note anything further.

    Thanks for the super-fast reply!
    Zitieren
    #14 framp 2021-09-20 22:13
    Hello Dave,

    I suggest to install the sample extensions with the installer and have a look into the sample extension code in /usr/local/bin. I also suggest to update to 0.6.6.

    Please open an issue on github and attach the debug log. Without the log I'm unable to help you.

    Cu framp
    Zitieren
    #13 Dave Neill 2021-09-20 18:10
    In trying to get capable with extensions, I am starting with the defaults. The debug log shows:

    20210920-110005 DBG 1185: --> callExtensions pre
    20210920-110005 DBG 1223: --- raspiBackup.0.6.5.1_mem_pre.sh not found - skipping
    20210920-110005 DBG 1223: --- raspiBackup.0.6.5.1_temp_pre.sh not found - skipping
    20210920-110005 DBG 1223: --- raspiBackup.0.6.5.1_disk_pre.sh not found - skipping
    20210920-110005 DBG 1223: --- raspiBackup.0.6.5.1_execute_pre.sh not found - skipping
    20210920-110006 DBG 1228:
    Zitieren
    #12 framp 2020-09-05 23:46
    Moin e-raser,

    das sollte nicht der Fall sein. Allerdings muss ich gestehen dass ich diesen Usecase nicht getestet habe :oops:

    Kannst Du mir mal das Debuglog dazu zukommen lassen? Das geht am besten wenn Du einen Issue in github erstellst und das log anhaengst.

    Cu framp
    Zitieren
    #11 e-raser 2020-09-05 23:36
    Hi,

    ich habe ein post-Skript für eine Notification "Backup war erfolgreich!" über eine API.

    Wie kann ich die Notification absetzen, wenn das Backup NICHT erfolgreich war? Es scheint, als würde ein post-Skript nur nach einem erfolgreichen raspiBackup aufgerufen werden.

    Danke für die Hilfestellung + Gruß

    e-raser
    Zitieren
    #10 framp 2019-06-11 12:15
    Moin Heinz aus Kiel,

    meine Tests habe ich ohne raspiBackup Call ausgefuehrt. Dabei habe ich dann nicht bemerkt dass auch beim exit von raspiBackup der trap greift. Jetzt sollte es aber funktionieren :-)

    Cu framp
    Zitieren
    #9 Heinz aus Kiel 2019-06-11 11:56
    zitiere framp:
    Noch einmal Moin Heinz aus Kiel,

    noch einmal vielen Dank fuer den Hinweis auf den Bug. Ist jetzt auch gefixed :-)

    Cu framp


    Hallo Framp,

    Hmm, bei mir fabriziert das Script "stopStartAllServicesWrapper.sh" immer noch 2 Aufrufe der trap-Routine "startAllServices", also 1x zu oft. Es werden die beiden Traps "EXIT" und "ERR" ausgelöst. Leider reicht es nicht, eine der beiden Trap-Flags zu entfernen, es bleibt bei einer doppelten Ausführung.

    Irgendwelche Ideen?

    Liebe Grüße aus Kiel,

    Heinz
    Zitieren
    #8 framp 2019-06-09 18:28
    Noch einmal Moin Heinz aus Kiel,

    noch einmal vielen Dank fuer den Hinweis auf den Bug. Ist jetzt auch gefixed :-)

    Cu framp
    Zitieren
    #7 framp 2019-06-09 18:12
    Moin Heinz aus Kiel,

    vielen dank fuer den Hinweis auf das Problem sowie wie es geloest wird. Du hast Recht: Es ist neue Funktionalitaet zum Script dazugekommen (XATTR support mit rsync) und ich habe nach der Erweiterung nicht mehr den alten Pfad getestet. Jetzt ist es gefixed :-)

    Cu framp
    Zitieren
    #6 Heinz aus Kiel 2019-06-09 14:47
    Hallo Framp,

    Das Script "stopStartAllServicesWrapper.sh" ist wirklich nützlich. Ich nutze es, um dann ein weiteres Script "raspiBackupWrapper.sh" anzustarten. Dazu sollte ein "sudo" eingefügt werden, sonst reichen die Rechte nicht aus.

    Des weiteren ist mir ausgefallen, das bei mir die Routine "startAllServices" mehrfach (6x) aufgerufen wird. Einfach zum Nachvollziehen den "RaspiBackup.sh" bzw. bei mir den "raspiBackupWrapper.sh" ausdokumentieren und von Hand starten.

    Anbei mein (gekürztes) Log. Die mit ### kommentierten Infos sind von mir!:

    service wd_keepalive stop &>/dev/null
    service watchdog stop &>/dev/null

    ###...
    service watchdog start &>/dev/null
    service wd_keepalive start &>/dev/null

    #### ==> 1 x ist ok

    ###...
    service watchdog start &>/dev/null
    service wd_keepalive start &>/dev/null

    #### ==> 2 x ist not ok

    usw.

    Liebe Grüße aus Kiel

    Heinz
    Zitieren
    #5 Heinz aus Kiel 2019-06-09 14:25
    Hallo Framp,

    könnte es sein, das in der Datei "raspiBackupWrapper.sh" die Variable LOOP_DISK_NAME bei Nichtgebrauch NICHT ausdokumentiert, sondern auf LOOP_DISK_NAME="" gesetzt werden muß? Ich habe ein paar Stündchen rumgesucht, da die "if [[-n $LOOP_DISK_NAME ]]" Abfrage im Wrapper bei dem undefinierten Zustand ab und zu fehlschlägt.

    Liebe Grüße aus Kiel
    Zitieren
    #4 Philipp 2018-01-14 19:19
    Hey framp,

    Danke für die schnelle Reaktion und den Fix, funktioniert alles, siehe auch meine Antwort auf Github :)
    Schönen Abend wünsche ich noch :-)
    zitiere framp:
    Moin Philipp,

    es gibt einen Fix fuer Dich ;-) Der neue Code steht im github. Bitte lade die beiden Extension Scripts davon runter und kopiere sie in /usr/local/bin. Danach sollte es funktionieren. Lass mich bitte wissen ob alles OK ist damit ich dann den Fix offiziell rausgebe.

    Cu framp
    Zitieren
    +1 #3 framp 2018-01-14 14:24
    Moin Philipp,

    es gibt einen Fix fuer Dich ;-) Der neue Code steht im github. Bitte lade die beiden Extension Scripts davon runter und kopiere sie in /usr/local/bin. Danach sollte es funktionieren. Lass mich bitte wissen ob alles OK ist damit ich dann den Fix offiziell rausgebe.

    Cu framp
    Zitieren
    +1 #2 framp 2018-01-14 11:58
    Moin Philipp,

    die Ausgabe von free hat sich in Stretch geändert. Ich passe das heute an.

    Cu framp
    Zitieren
    #1 Philipp 2018-01-14 11:25
    Morgen :),

    vielleicht eine einfache Frage. Unter Raspbian Stretch fehlen dem Beispielplugin mem_pre & mem_post beim auslesen die Werte. Die Ausgabe ist einfach:

    "--- RBK1001I: Speicherauslastung - Vor dem Backup - Belegt: MB Frei: MB - Nach dem Backup: Belegt: MB Frei: MB"

    Da sie im Oktober aktualisiert wurden vermute ich das sich ein Fehler eingeschlichen hat. Leider finde ich ihn nicht selbst, hat jemand eine Idee?
    Zitieren