diff --git a/TODO.md b/TODO.md index 2abc29c..b05c990 100644 --- a/TODO.md +++ b/TODO.md @@ -4,6 +4,7 @@ DC-Dump - new for postgres > server exec postgres su - postgres -c pg_dumpall >pg.dump + - jede db einzeln? - +mariadb - hooks für weitere @@ -33,16 +34,16 @@ nas-backup weekly 1 logging - für auto-fns mail() -- mail() loggt in extra Datei und ruft log(), für std log -- Name std log in mail() ausgeben -- mail log lokal anlegen (wo?) -- am Ende von auto mail log in mail und file löschen -> py-script -- alle Programme müssen stdout/stderr auf std log umleiten -- für jeden Lauf neue log datei (+date) -- Name der log Datei bei !auto auf stderr ausgeben (damit stdout ggf. geparst werden kann, alt.: param --machine) -- log file in nfs/backups/log/$HOST_NAME-$(date '+%Y-%m-%d_%H%M').log +(x) mail() loggt in extra Datei und ruft log(), für std log +(x) Name std log in mail() ausgeben +(-) mail log lokal anlegen (wo?) +(-) am Ende von auto mail log in mail und file löschen -> py-script +(x) alle Programme müssen stdout/stderr auf std log umleiten +(x) für jeden Lauf neue log datei (+date) +(-) Name der log Datei bei !auto auf stderr ausgeben (damit stdout ggf. geparst werden kann, alt.: param --machine) +(x) log file in nfs/backups/log/$HOST_NAME-$(date '+%Y-%m-%d_%H%M').log - bei jedem Lauf alte logs löschen (7d?) -> wie? -- evtl. logs lokal ablegen und am Ende auf NAS kopieren +(-) evtl. logs lokal ablegen und am Ende auf NAS kopieren backup server+nas extern - rsync nas-backup 2x HDD intern (weekly) (5TB?) diff --git a/main.inc.sh b/main.inc.sh index 4d5a9f2..3832364 100755 --- a/main.inc.sh +++ b/main.inc.sh @@ -7,14 +7,28 @@ PASSPHRASE=1234567890 EXT=tgz.gpg LIST_EXT=txt +LOG_RECIPIENT=hb242@pm.me + INFO=INFO +WARN=WARN ERROR=ERROR DEBUG=DEBUG SUCCESS="*** success" INF="---" +WRN=":::" ERR="###" DBG="===" +dump_mariadb() { + # TODO + echo +} + +dump_postgresql() { + # TODO + echo +} + # docker compose ausführen # # $1 ff. - compose parameter, z.B. up -d @@ -48,10 +62,6 @@ isFunction() { declare -Ff "$1" ; } # Log-Datei schreiben. # -# Die Ausgabe geht auch auf STDOUT, dadurch kann die vollständige Ausgabe, -# einschließlich Status- und Fehlermeldungen der Programme in ein erweitertes -# Log für die Fehlersuche umgeleitet werden. -# # $1 - Typ, z.B. INFO, WARN, ERROR, etc. # $2 ff. - die Meldung, die ins Log geschreiben wird # @@ -63,6 +73,15 @@ log() { } +# Reduziertes Log für automatische Läufe +# +# Das Log wird am Ende des Laufs als Mail verschickt. Die Meldungen +# werden zusätzlich im Standard-Log protokolliert. +# Dieses log wird nur geschrieben, wenn $MAIL_LOG_FILE definiert ist. +# +# $1 - Typ, z.B. INFO, WARN, ERROR, etc. +# $2 ff. - die Meldung, die ins Log geschreiben wird +# mail_log() { local type=$1 shift @@ -72,6 +91,13 @@ mail_log() { log "$type" "$@" } +# Reduziertes Log senden +# +send_mail_log() { + log $DEBUG "$DBG > $HERE/mail.sh $LOG_RECIPIENT \"[$HOST_NAME] Nightly Backup\" $MAIL_LOG_FILE" + $HERE/mail.sh $LOG_RECIPIENT "[$HOST_NAME] Nightly Backup" $MAIL_LOG_FILE >>$LOG_FILE 2>&1 +} + # check if $1 is error (!=0) and write result to log # # $1 - return code to check @@ -97,6 +123,8 @@ is_error() { # # $1, ff. - return codes # +# returns 0 for success, 1 for one or more errors +# check_pipe_rc() { local result=0 local count=1 @@ -119,6 +147,8 @@ check_pipe_rc() { # $1 - Verzeichnis auf Server # $2 - Ziel-Verzeichnis auf der NAS # +# returns return code of mv +# copy_to_nas() { log $DEBUG "$DBG copy_to_nas $@" local source="$1" @@ -167,6 +197,8 @@ iterate_dirs_in() { # # $1 - dir to check # +# returns 0 for success, 1 otherwise +# check_directory() { log $DEBUG "$DBG check_directory $@" local dir=$1 @@ -186,6 +218,8 @@ check_directory() { # # $1 - zu löschendes Verzeichnis # +# returns 0 for success, 1 otherwise +# delete_dir() { log $DEBUG "$DBG delete_dir $@" local dir=$1 @@ -208,6 +242,8 @@ backup_file_prefix() { # $2 - Zielverzeichnis für .tgz.gpg-Dateien # $3 ff. - Verzeichnisse, die nicht gesichert werden sollen (kann leer bleiben) # +# returns 0 for success, 1 otherwise +# backup_all_dirs() { log $DEBUG "$DBG backup_all_dirs $@" local root=$1 @@ -240,6 +276,8 @@ backup_all_dirs() { # $2 - Zielpfad und -name für das Archiv # $2 - zu sicherndes Verzeichnis # +# returns 0 for success, 1 otherwise +# backup_dir() { log $DEBUG "$DBG backup_dir $@" local root=$1 @@ -259,6 +297,8 @@ backup_dir() { # hier wird dann dass hostname-script gesourced (s.o.) und in einer Schleife werden die # entsprechend en backup_*-Funktionen aufgerufen # +# returns 0 for success, 1 otherwise +# do_auto_backup() { log $DEBUG "$DBG do_auto_backup $@" local func=$1 @@ -301,13 +341,13 @@ backup_daily() { mail_log $INFO ">>>>>>>>>> daily auto backup $VER for $HOST_NAME <<<<<<<<<<" do_auto_backup backup_daily mail_log $INFO ">>>>>>>>>> end of auto backup" - # TODO mail log + send_mail_log } backup_weekly() { mail_log $INFO ">>>>>>>>>> weekly auto backup $VER for $HOST_NAME <<<<<<<<<<" do_auto_backuo backup_weekly mail_log $INFO ">>>>>>>>>> end of auto backup" - # TODO mail log + send_mail_log } export_backups() { @@ -317,13 +357,15 @@ export_backups() { # check USB drive # del USB drive (?) # rsync USB -> 1|2, video, serien - # mail log + # send_mail_log } # Inhalt des Archivs in eine Textdatei ausgeben. # # $1 - Archiv # +# returns 0 for success, 1 otherwise +# create_list() { log $DEBUG "$DBG create_list $@" local archive=$1 @@ -338,6 +380,8 @@ create_list() { # # $1 - Archiv # +# returns 0 for success, 1 otherwise +# test_integrity() { log $DEBUG "$DBG test_integrity $@" local archive=$1 @@ -354,6 +398,8 @@ test_integrity() { # $1 - Archiv, ggf. mit Pfad # $2 ff. - zurückzusichernde Dateien/Verzeichnisse # +# returns 0 for success, 1 otherwise +# restore() { log $DEBUG "$DBG restore $@" local archive=$1 @@ -376,6 +422,8 @@ restore() { # # $1 - Verzeichnis unter dem alle Backups liegen # +# returns 0 for success, 1 otherwise +# list_archives() { log $DEBUG "$DBG list_archives $@" local target=$1 @@ -391,6 +439,8 @@ list_archives() { # $1 - Verzeichnis unter dem alle Backups liegen # $2 - Archiv-Datei mit Pfad ab $1 # +# returns 0 for success, 1 otherwise +# list_archive_content() { log $DEBUG "$DBG list_archive_content $@" local root=$1 diff --git a/nathan.sh b/nathan.sh index 744d639..e95a4f7 100755 --- a/nathan.sh +++ b/nathan.sh @@ -21,6 +21,9 @@ backup_daily3() { before_backup() { + dump_mariadb + dump_postgresql + # TODO error handling stop_docker return $? }