Benutzer-Werkzeuge

Webseiten-Werkzeuge


tachtler:dovecot_backup_-_skript

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
Nächste ÜberarbeitungBeide Seiten der Revision
tachtler:dovecot_backup_-_skript [2018/08/06 09:01] – [Skript - Dateien] klaustachtler:dovecot_backup_-_skript [2019/01/30 21:56] – [Skript - Log] klaus
Zeile 12: Zeile 12:
  
 ^ Beschreibung  ^ Externer Link                                                                   ^ ^ Beschreibung  ^ Externer Link                                                                   ^
 +| Linux-Magazin | [[http://www.linux-magazin.de/ausgaben/2018/06/backups-von-e-mails/|Wie Admins ihre Mailserver vor Datenverlust schützen]] / {{ :tachtler:protected:054-058_email_backup_v2.pdf |Artikel aus Ausgabe 06/2018}} |
 | Homepage      | [[http://dovecot.org|http://dovecot.org]]                                       | | Homepage      | [[http://dovecot.org|http://dovecot.org]]                                       |
 | Dokumentation | [[http://dovecot.org/documentation.html|http://dovecot.org/documentation.html]] | | Dokumentation | [[http://dovecot.org/documentation.html|http://dovecot.org/documentation.html]] |
Zeile 26: Zeile 27:
 Nachfolgendes Skript ermöglicht die Erstellung einer ***.tar.gz**-Datei  Nachfolgendes Skript ermöglicht die Erstellung einer ***.tar.gz**-Datei 
   * von **__allen__** Benutzerkonten   * von **__allen__** Benutzerkonten
 +  * **__oder__** über **__eine Datei mit E-Mail-Adressen__**, der zu sichernden Benutzerkonten
   * pro **__Benutzer eine eigene *.tar.gz-Datei__**   * pro **__Benutzer eine eigene *.tar.gz-Datei__**
   * auf **__Dateiebene__**   * auf **__Dateiebene__**
Zeile 44: Zeile 46:
  
 # CUSTOM - Backup-Files. # CUSTOM - Backup-Files.
-DIR_BACKUP='srv/backup'+DIR_BACKUP='/srv/backup'
 FILE_BACKUP=dovecot_backup_`date '+%Y%m%d_%H%M%S'`.tar.gz FILE_BACKUP=dovecot_backup_`date '+%Y%m%d_%H%M%S'`.tar.gz
 FILE_DELETE='*.tar.gz' FILE_DELETE='*.tar.gz'
-BACKUPFILES_DELETE=7+BACKUPFILES_DELETE=14
  
 # CUSTOM - dovecot Folders. # CUSTOM - dovecot Folders.
Zeile 54: Zeile 56:
 MAILDIR_USER='vmail' MAILDIR_USER='vmail'
 MAILDIR_GROUP='vmail' MAILDIR_GROUP='vmail'
 +
 +# CUSTOM - Path and file name of a file with e-mail addresses to backup, if
 +#          SET. If NOT, the script will determine all mailboxes by default.
 +# FILE_USERLIST='/path/and/file/name/of/user/list/with/one/email/per/line'
 +# - OR -
 +# FILE_USERLIST=''
 +FILE_USERLIST=''
 +
 +# CUSTOM - Check when FILE_USERLIST was used, if the user per line was a
 +#          valid e-mail address [Y|N].
 +FILE_USERLIST_VALIDATE_EMAIL='N'
  
 # CUSTOM - Mail-Recipient. # CUSTOM - Mail-Recipient.
Zeile 77: Zeile 90:
 | ''MAILDIR_USER''       | Benutzername unter dem alle Postfächer (Mailboxes) verwaltet werden, **siehe auch:**\\ [[tachtler:dovecot_centos_6#authentifizierungsbenutzer|Dovecot CentOS 6 - Konfiguration Authentifizierung - Authentifizierungsbenutzer]]\\ [[tachtler:dovecot_centos_7#authentifizierungsbenutzer|Dovecot CentOS 7 - Konfiguration Authentifizierung - Authentifizierungsbenutzer]]    | | ''MAILDIR_USER''       | Benutzername unter dem alle Postfächer (Mailboxes) verwaltet werden, **siehe auch:**\\ [[tachtler:dovecot_centos_6#authentifizierungsbenutzer|Dovecot CentOS 6 - Konfiguration Authentifizierung - Authentifizierungsbenutzer]]\\ [[tachtler:dovecot_centos_7#authentifizierungsbenutzer|Dovecot CentOS 7 - Konfiguration Authentifizierung - Authentifizierungsbenutzer]]    |
 | ''MAILDIR_GROUP''      | Benutzergruppe unter dem alle Postfächer (Mailboxes) verwaltet werden, **siehe auch:**\\ [[tachtler:dovecot_centos_6#authentifizierungsbenutzer|Dovecot CentOS 6 - Konfiguration Authentifizierung - Authentifizierungsbenutzer]]\\ [[tachtler:dovecot_centos_7#authentifizierungsbenutzer|Dovecot CentOS 7 - Konfiguration Authentifizierung - Authentifizierungsbenutzer]]  | | ''MAILDIR_GROUP''      | Benutzergruppe unter dem alle Postfächer (Mailboxes) verwaltet werden, **siehe auch:**\\ [[tachtler:dovecot_centos_6#authentifizierungsbenutzer|Dovecot CentOS 6 - Konfiguration Authentifizierung - Authentifizierungsbenutzer]]\\ [[tachtler:dovecot_centos_7#authentifizierungsbenutzer|Dovecot CentOS 7 - Konfiguration Authentifizierung - Authentifizierungsbenutzer]]  |
 +| ''FILE_USERLIST''      | **Datei** mit Benutzernamen (einer pro Zeile), welche Mailboxen/Benutzer gesichert werden, anstelle der Ermittlung durch ''doveadm user ”*”'', um nicht alle Mailboxen/Benutzer zwangsweise zu sichern |
 +| ''FILE_USERLIST_VALIDATE_EMAIL'' | Überprüfung des Benutzernamens, ob dieser eine gültige E-Mail Adresse darstellt. **Muss dann __deaktiviert__ werden, wenn der Benutzername keine E-Mail Adresse ist!** |
 +| ''MAIL_RECIPIENT''     | **Empfänger** E-Mail-Adresse für E-Mails des Skripts |
 +| ''MAIL_STATUS''        | Versand einer **Status** E-Mail nach erfolgreicher Skript Ausführung |
  
 ==== /var/lib/dovecot ==== ==== /var/lib/dovecot ====
Zeile 109: Zeile 126:
 #               will be send by e-mail.                                      # #               will be send by e-mail.                                      #
 #                                                                            # #                                                                            #
-# Last update : 06.08.2018                                                   # +# Last update : 30.01.2019                                                   # 
-# Version     : 1.06                                                         #+# Version     : 1.09                                                         #
 #                                                                            # #                                                                            #
 # Author      : Klaus Tachtler, <klaus@tachtler.net>                         # # Author      : Klaus Tachtler, <klaus@tachtler.net>                         #
Zeile 123: Zeile 140:
 #  +----------------------------------------------------------------------+  # #  +----------------------------------------------------------------------+  #
 #                                                                            # #                                                                            #
-# Copyright (c) 2018 by Klaus Tachtler.                                      #+# Copyright (c) 2019 by Klaus Tachtler.                                      #
 #                                                                            # #                                                                            #
 ############################################################################## ##############################################################################
Zeile 165: Zeile 182:
 # Description : Avoid an error when trying to delete backup files, if the    # # Description : Avoid an error when trying to delete backup files, if the    #
 #               $BACKUPFILES_DELETE count is NOT reached.                    # #               $BACKUPFILES_DELETE count is NOT reached.                    #
-#               Change file owner, direcly after backup was created.         +#               Change file owner, after backup was created.                 
-#               Change file permissionsi to 600, direcly after backup was    # +#               Change file permissions to 600, after backup was created.    # 
-#               created                                                    +#               Thanks to Seep1959                                         # 
-#               Thanks to Seep1559                                           #+# -------------------------------------------------------------------------- # 
 +# Version     : 1.07                                                         # 
 +# Description : Compatibility: Change the parameter order for the step       # 
 +#               "Delete archive files for user" for better compatibility     # 
 +#               with FreeBSD.                                                
 +#               Thanks to Alexander Preyer.                                  # 
 +# -------------------------------------------------------------------------- # 
 +# Version     : 1.08                                                         # 
 +# Description : GitHub Issue #9                                              # 
 +#               Add ability to only backup specific mailboxes, by using the  #  
 +#               variable FILE_USERLIST with the file path and file name as   # 
 +#               content. The file must contain one e-mail address per line.  # 
 +#               Add the calculation of the script runtime.                   # 
 +#               Thanks to graue Ritter.                                      # 
 +# -------------------------------------------------------------------------- # 
 +# Version     : 1.09                                                         # 
 +# Description : Add a switch to enable or disable e-mail address check, when # 
 +#               FILE_USERLIST was set and used.                              # 
 +#               Thanks to kbridger.                                          #
 # -------------------------------------------------------------------------- # # -------------------------------------------------------------------------- #
 # Version     : x.xx                                                         # # Version     : x.xx                                                         #
Zeile 193: Zeile 228:
 MAILDIR_USER='vmail' MAILDIR_USER='vmail'
 MAILDIR_GROUP='vmail' MAILDIR_GROUP='vmail'
 +
 +# CUSTOM - Path and file name of a file with e-mail addresses to backup, if
 +#          SET. If NOT, the script will determine all mailboxes by default.
 +# FILE_USERLIST='/path/and/file/name/of/user/list/with/one/user/per/line'
 +# - OR -
 +# FILE_USERLIST=''
 +FILE_USERLIST=''
 +
 +# CUSTOM - Check when FILE_USERLIST was used, if the user per line was a
 +#          valid e-mail address [Y|N].
 +FILE_USERLIST_VALIDATE_EMAIL='N'
  
 # CUSTOM - Mail-Recipient. # CUSTOM - Mail-Recipient.
Zeile 215: Zeile 261:
 CHOWN_COMMAND=`command -v chown` CHOWN_COMMAND=`command -v chown`
 CHMOD_COMMAND=`command -v chmod` CHMOD_COMMAND=`command -v chmod`
 +GREP_COMMAND=`command -v grep`
 FILE_LOCK='/tmp/'$SCRIPT_NAME'.lock' FILE_LOCK='/tmp/'$SCRIPT_NAME'.lock'
 FILE_LOG='/var/log/'$SCRIPT_NAME'.log' FILE_LOG='/var/log/'$SCRIPT_NAME'.log'
Zeile 223: Zeile 270:
 VAR_SENDER='root@'$VAR_HOSTNAME VAR_SENDER='root@'$VAR_HOSTNAME
 VAR_EMAILDATE=`$DATE_COMMAND '+%a, %d %b %Y %H:%M:%S (%Z)'` VAR_EMAILDATE=`$DATE_COMMAND '+%a, %d %b %Y %H:%M:%S (%Z)'`
 +declare -a VAR_LISTED_USER=()
 declare -a VAR_FAILED_USER=() declare -a VAR_FAILED_USER=()
 VAR_COUNT_USER=0 VAR_COUNT_USER=0
Zeile 244: Zeile 292:
  
 function movelog() { function movelog() {
-        $CAT_COMMAND $FILE_LAST_LOG >> $FILE_LOG + $CAT_COMMAND $FILE_LAST_LOG >> $FILE_LOG 
-        $RM_COMMAND -f $FILE_LAST_LOG + $RM_COMMAND -f $FILE_LAST_LOG  
-        $RM_COMMAND -f $FILE_LOCK+ $RM_COMMAND -f $FILE_LOCK
 } }
  
Zeile 277: Zeile 325:
 # Main. # Main.
 log "" log ""
 +RUN_TIMESTAMP=`$DATE_COMMAND '+%s'`
 log "+-----------------------------------------------------------------+" log "+-----------------------------------------------------------------+"
-log "| Start backup the mailboxes of dovecot server................... |"+log "| Start backup of the mailboxes [`$DATE_COMMAND '+%a, %d %b %Y %H:%M:%S (%Z)'`] |"
 log "+-----------------------------------------------------------------+" log "+-----------------------------------------------------------------+"
 log "" log ""
-log "Run script with following parameter:"+log "SCRIPT_NAME.................$SCRIPT_NAME"
 log "" log ""
-log "SCRIPT_NAME...: $SCRIPT_NAME"+log "DIR_BACKUP..................: $DIR_BACKUP"
 log "" log ""
-log "DIR_BACKUP....: $DIR_BACKUP"+log "MAIL_RECIPIENT..............: $MAIL_RECIPIENT" 
 +log "MAIL_STATUS.................: $MAIL_STATUS"
 log "" log ""
-log "MAIL_RECIPIENT: $MAIL_RECIPIENT+log "FILE_USERLIST...............: $FILE_USERLIST
-log "MAIL_STATUS...: $MAIL_STATUS"+log "FILE_USERLIST_VALIDATE_EMAIL: $FILE_USERLIST_VALIDATE_EMAIL"
 log "" log ""
  
Zeile 295: Zeile 345:
         log "Check if command '$DSYNC_COMMAND' was found....................[FAILED]"         log "Check if command '$DSYNC_COMMAND' was found....................[FAILED]"
         sendmail ERROR         sendmail ERROR
-        movelog+ movelog
         exit 11         exit 11
 else else
Zeile 305: Zeile 355:
         log "Check if command '$TAR_COMMAND' was found......................[FAILED]"         log "Check if command '$TAR_COMMAND' was found......................[FAILED]"
         sendmail ERROR         sendmail ERROR
-        movelog+ movelog
         exit 12         exit 12
 else else
Zeile 315: Zeile 365:
         log "Check if command '$TOUCH_COMMAND' was found....................[FAILED]"         log "Check if command '$TOUCH_COMMAND' was found....................[FAILED]"
         sendmail ERROR         sendmail ERROR
-        movelog+ movelog
         exit 13         exit 13
 else else
Zeile 325: Zeile 375:
         log "Check if command '$RM_COMMAND' was found.......................[FAILED]"         log "Check if command '$RM_COMMAND' was found.......................[FAILED]"
         sendmail ERROR         sendmail ERROR
-        movelog+ movelog
         exit 14         exit 14
 else else
Zeile 335: Zeile 385:
         log "Check if command '$CAT_COMMAND' was found......................[FAILED]"         log "Check if command '$CAT_COMMAND' was found......................[FAILED]"
         sendmail ERROR         sendmail ERROR
-        movelog+ movelog
         exit 15         exit 15
 else else
Zeile 345: Zeile 395:
         log "Check if command '$DATE_COMMAND' was found.....................[FAILED]"         log "Check if command '$DATE_COMMAND' was found.....................[FAILED]"
         sendmail ERROR         sendmail ERROR
-        movelog+ movelog
         exit 16         exit 16
 else else
Zeile 355: Zeile 405:
         log "Check if command '$MKDIR_COMMAND' was found....................[FAILED]"         log "Check if command '$MKDIR_COMMAND' was found....................[FAILED]"
         sendmail ERROR         sendmail ERROR
-        movelog+ movelog
         exit 17         exit 17
 else else
Zeile 365: Zeile 415:
         log "Check if command '$CHOWN_COMMAND' was found....................[FAILED]"         log "Check if command '$CHOWN_COMMAND' was found....................[FAILED]"
         sendmail ERROR         sendmail ERROR
-        movelog+ movelog
         exit 18         exit 18
 else else
Zeile 375: Zeile 425:
         log "Check if command '$CHMOD_COMMAND' was found....................[FAILED]"         log "Check if command '$CHMOD_COMMAND' was found....................[FAILED]"
         sendmail ERROR         sendmail ERROR
-        movelog+ movelog
         exit 19         exit 19
 else else
         log "Check if command '$CHMOD_COMMAND' was found....................[  OK  ]"         log "Check if command '$CHMOD_COMMAND' was found....................[  OK  ]"
 +fi
 +
 +# Check if command (file) NOT exist OR IS empty.
 +if [ ! -s "$GREP_COMMAND" ]; then
 +        log "Check if command '$GREP_COMMAND' was found.....................[FAILED]"
 +        sendmail ERROR
 + movelog
 +        exit 20
 +else
 +        log "Check if command '$GREP_COMMAND' was found.....................[  OK  ]"
 fi fi
  
Zeile 385: Zeile 445:
         log "Check if command '$PROG_SENDMAIL' was found................[FAILED]"         log "Check if command '$PROG_SENDMAIL' was found................[FAILED]"
         sendmail ERROR         sendmail ERROR
-        movelog + movelog 
-        exit 20+        exit 21
 else else
         log "Check if command '$PROG_SENDMAIL' was found................[  OK  ]"         log "Check if command '$PROG_SENDMAIL' was found................[  OK  ]"
Zeile 402: Zeile 462:
         log ""         log ""
         sendmail ERROR         sendmail ERROR
-        movelog+ movelog
         exit 30         exit 30
 fi fi
Zeile 409: Zeile 469:
 if [ ! -d "$DIR_BACKUP" ]; then if [ ! -d "$DIR_BACKUP" ]; then
         log "Check if DIR_BACKUP exists.................................[FAILED]"         log "Check if DIR_BACKUP exists.................................[FAILED]"
-        $MKDIR_COMMAND -p $DIR_BACKUP+ $MKDIR_COMMAND -p $DIR_BACKUP
         log "DIR_BACKUP was now created.................................[  OK  ]"         log "DIR_BACKUP was now created.................................[  OK  ]"
 else else
         log "Check if DIR_BACKUP exists.................................[  OK  ]"         log "Check if DIR_BACKUP exists.................................[  OK  ]"
 +fi
 +
 +# Check if FILE_USERLIST NOT set OR IS empty.
 +log ""
 +if [ ! -n "$FILE_USERLIST"  ]; then
 +        log "Check if the variable FILE_USERLIST is set.................[  NO  ]"
 +        log "Mailboxes to backup will be determined by doveadm user \"*\"."
 +
 + for users in `doveadm user "*"`; do
 + VAR_LISTED_USER+=($users);
 + done
 +else
 +        log "Check if the variable FILE_USERLIST is set.................[  OK  ]"
 +        log "Mailboxes to backup will read from file."
 +        log ""
 +        log "- File: [$FILE_USERLIST]"
 +
 + # Check if file exists.
 + if [ -f "$FILE_USERLIST" ]; then
 +        log "- Check if FILE_USERLIST exists............................[  OK  ]"
 + else
 +        log "- Check if FILE_USERLIST exists............................[FAILED]"
 +        log ""
 +         sendmail ERROR
 + movelog
 +        exit 40
 + fi
 +
 + # Check if file is readable.
 + if [ -r "$FILE_USERLIST" ]; then
 +        log "- Check if FILE_USERLIST is readable.......................[  OK  ]"
 + else
 +        log "- Check if FILE_USERLIST is readable.......................[FAILED]"
 +        log ""
 +         sendmail ERROR
 + movelog
 +        exit 41
 + fi
 +
 + # Read file into variable.
 + while IFS= read -r line
 + do
 + # Check for valid e-mail address.
 + if [ $FILE_USERLIST_VALIDATE_EMAIL = 'Y' ]; then
 + # Check if basic email address syntax is valid.
 + if echo "${line}" | $GREP_COMMAND '^[a-zA-Z0-9]*@[a-zA-Z0-9]*\.[a-zA-Z0-9]*$' >/dev/null; then
 + VAR_LISTED_USER+=($line);
 + else
 +        log ""
 +         log "ERROR: The user: $line is NOT valid e-mail address!"
 +
 +                 ((VAR_COUNT_FAIL++))
 +                 VAR_FAILED_USER+=($line);
 + fi
 + else
 + VAR_LISTED_USER+=($line);
 + fi
 + done <"$FILE_USERLIST"
 +
 + # Check if VAR_COUNT_FAIL is greater than zero. If YES, set VAR_COUNT_USER to VAR_COUNT_FAIL.
 + if [ "$VAR_COUNT_FAIL" -ne "0" ]; then
 + VAR_COUNT_USER=$VAR_COUNT_FAIL
 + fi
 fi fi
  
Zeile 423: Zeile 546:
  
 # Start real backup process for all users. # Start real backup process for all users.
-for users in `doveadm user "*"`; do +for users in "${VAR_LISTED_USER[@]}"; do 
-        log "Start backup process for user: $users ..."+ log "Start backup process for user: $users ..."
  
-        ((VAR_COUNT_USER++)) + ((VAR_COUNT_USER++)) 
-        DOMAINPART=${users#*@} + DOMAINPART=${users#*@} 
-        LOCALPART=${users%%@*} + LOCALPART=${users%%@*} 
-        LOCATION="$DIR_BACKUP/$DOMAINPART/$LOCALPART/$MAILDIR_NAME" + LOCATION="$DIR_BACKUP/$DOMAINPART/$LOCALPART/$MAILDIR_NAME" 
-        USERPART="$DOMAINPART/$LOCALPART"+ USERPART="$DOMAINPART/$LOCALPART"
  
-        log "Extract mailbox data for user: $users ..." + log "Extract mailbox data for user: $users ..." 
-        $DSYNC_COMMAND -o plugin/quota= -f -u $users backup $MAILDIR_TYPE:$LOCATION+ $DSYNC_COMMAND -o plugin/quota= -f -u $users backup $MAILDIR_TYPE:$LOCATION
  
-        # Check the status of dsync and continue the script depending on the result. + # Check the status of dsync and continue the script depending on the result. 
-        if [ "$?" != "0" ]; then + if [ "$?" != "0" ]; then 
-                case "$?" in + case "$?" in 
-                1)      log "Synchronization failed > user: $users !!!" + 1) log "Synchronization failed > user: $users !!!" 
-                        ;; + ;; 
-                2)      log "Synchronization was done without errors, but some changes couldn't be done, so the mailboxes aren't perfectly synchronized for user: $users !!!" + 2) log "Synchronization was done without errors, but some changes couldn't be done, so the mailboxes aren't perfectly synchronized for user: $users !!!" 
-                        ;; + ;; 
-                esac + esac 
-                if [ "$?" -gt "3" ]; then + if [ "$?" -gt "3" ]; then 
-                        log "Synchronization failed > user: $users !!!" + log "Synchronization failed > user: $users !!!" 
-                fi+ fi
  
-                ((VAR_COUNT_FAIL++)) + ((VAR_COUNT_FAIL++)) 
-                VAR_FAILED_USER+=($users); + VAR_FAILED_USER+=($users); 
-        else + else 
-                log "Synchronization done for user: $users ..."+         log "Synchronization done for user: $users ..."
  
-                cd $DIR_BACKUP+ cd $DIR_BACKUP
  
-                log "Packaging to archive for user: $users ..." + log "Packaging to archive for user: $users ..." 
-                $TAR_COMMAND -cvzf $users-$FILE_BACKUP $USERPART --atime-preserve --preserve-permissions+ $TAR_COMMAND -cvzf $users-$FILE_BACKUP $USERPART --atime-preserve --preserve-permissions
  
-                log "Delete archive files for user: $users ..." + log "Delete archive files for user: $users ..." 
-                (ls $users-$FILE_DELETE -t|head -n $BACKUPFILES_DELETE;ls $users-$FILE_DELETE )|sort|uniq -u|xargs -r rm + (ls -t $users-$FILE_DELETE|head -n $BACKUPFILES_DELETE;ls $users-$FILE_DELETE)|sort|uniq -u|xargs -r rm 
-                if [ "$?" != "0" ]; then + if [ "$?" != "0" ]; then 
-                        log "Delete old archive files $DIR_BACKUP .....................[FAILED]" +         log "Delete old archive files $DIR_BACKUP .....................[FAILED]" 
-                else + else 
-                        log "Delete old archive files $DIR_BACKUP .....................[  OK  ]" +         log "Delete old archive files $DIR_BACKUP .....................[  OK  ]" 
-                fi+ fi
  
-                log "Delete mailbox files for user: $users ..." + log "Delete mailbox files for user: $users ..." 
-                $RM_COMMAND "$DIR_BACKUP/$DOMAINPART" -rf + $RM_COMMAND "$DIR_BACKUP/$DOMAINPART" -rf 
-                if [ "$?" != "0" ]; then + if [ "$?" != "0" ]; then 
-                        log "Delete mailbox files at: $DIR_BACKUP .....................[FAILED]" +         log "Delete mailbox files at: $DIR_BACKUP .....................[FAILED]" 
-                else + else 
-                        log "Delete mailbox files at: $DIR_BACKUP .....................[  OK  ]" +         log "Delete mailbox files at: $DIR_BACKUP .....................[  OK  ]" 
-                fi + fi 
-        fi+ fi
  
-        log "Ended backup process for user: $users ..."+ log "Ended backup process for user: $users ..."
         log ""         log ""
 done done
Zeile 492: Zeile 615:
         exit 99         exit 99
 else else
-        log "" 
         log "+-----------------------------------------------------------------+"         log "+-----------------------------------------------------------------+"
         log "| End backup $SCRIPT_NAME ..................................... |"         log "| End backup $SCRIPT_NAME ..................................... |"
Zeile 501: Zeile 623:
 # Finish syncing with runntime statistics. # Finish syncing with runntime statistics.
 log "+-----------------------------------------------------------------+" log "+-----------------------------------------------------------------+"
-log "Runntime statistics............................................ |"+log "Runtime statistics............................................. |"
 log "+-----------------------------------------------------------------+" log "+-----------------------------------------------------------------+"
 log "" log ""
Zeile 508: Zeile 630:
  
 if [ "$VAR_COUNT_FAIL" -gt "0" ]; then if [ "$VAR_COUNT_FAIL" -gt "0" ]; then
-        log "- ...Mailbox of failed users: " + log "- ...Mailbox of failed users: " 
-        for i in "${VAR_FAILED_USER[@]}" + for i in "${VAR_FAILED_USER[@]}" 
-        do + do 
-                log "- ... $i" + log "- ... $i" 
-        done+ done
 fi fi
  
 +log ""
 +END_TIMESTAMP=`$DATE_COMMAND '+%s'`
 +log "Runtime: `$DATE_COMMAND -u -d "0 $END_TIMESTAMP seconds - $RUN_TIMESTAMP seconds" +'%H:%M:%S'` time elapsed."
 log "" log ""
 log "+-----------------------------------------------------------------+" log "+-----------------------------------------------------------------+"
-log "Finish......................................................... |"+log "Finished creating the backups [`$DATE_COMMAND '+%a, %d %b %Y %H:%M:%S (%Z)'`] |"
 log "+-----------------------------------------------------------------+" log "+-----------------------------------------------------------------+"
 log "" log ""
  
-# If errors occured on user backups, exit with return code 1 instead of 0.+# If errors occurred on user backups, exit with return code 1 instead of 0.
 if [ "$VAR_COUNT_FAIL" -gt "0" ]; then if [ "$VAR_COUNT_FAIL" -gt "0" ]; then
         sendmail ERROR         sendmail ERROR
-        movelog + movelog 
-        exit 1+ exit 1
 else else
-        # Status e-mail. + # Status e-mail. 
-        if [ $MAIL_STATUS = 'Y' ]; then + if [ $MAIL_STATUS = 'Y' ]; then 
-                sendmail STATUS +         sendmail STATUS 
-        fi + fi 
-        movelog + movelog 
-        exit 0+ exit 0
 fi fi
 +</code>
 +
 +==== Beispieldatei: FILE_USERLIST ====
 +
 +Nachfolgend eine Beispiel für den Inhalt einer Datei, welche unter der Variable:
 +<code bash>
 +# CUSTOM - Path and file name of a file with e-mail addresses to backup, if
 +#          SET. If NOT, the script will determine all mailboxes by default.
 +# FILE_USERLIST='/path/and/file/name/of/user/list/with/one/email/per/line'
 +# - OR -
 +# FILE_USERLIST=''
 +FILE_USERLIST='/srv/dovecot_backup.userlist'
 +</code>
 +definiert werden kann:
 +
 +<code>
 +klaus@tachtler.net
 +petra@tachtler.net
 +</code>
 +**__oder__**
 +
 +<code>
 +klaus
 +petra
 </code> </code>
  
Zeile 541: Zeile 690:
   * ''/var/log/'' - hier z.B. ''/var/log/dovecot_backup.log''   * ''/var/log/'' - hier z.B. ''/var/log/dovecot_backup.log''
  
 +**__OHNE__ ''FILE_USERLIST'':**
 +<code>
 +2019/01/30 14:24:28  INFO: +-----------------------------------------------------------------+
 +2019/01/30 14:24:28  INFO: | Start backup of the mailboxes [Wed, 30 Jan 2019 14:24:28 (CET)] |
 +2019/01/30 14:24:28  INFO: +-----------------------------------------------------------------+
 +2019/01/30 14:24:28  INFO:
 +2019/01/30 14:24:28  INFO: SCRIPT_NAME.................: dovecot_backup
 +2019/01/30 14:24:28  INFO:
 +2019/01/30 14:24:28  INFO: DIR_BACKUP..................: /srv/backup
 +2019/01/30 14:24:28  INFO:
 +2019/01/30 14:24:28  INFO: MAIL_RECIPIENT..............: you@example.com
 +2019/01/30 14:24:28  INFO: MAIL_STATUS.................: N
 +2019/01/30 14:24:28  INFO:
 +2019/01/30 14:24:28  INFO: FILE_USERLIST...............: 
 +2019/01/30 14:24:28  INFO: FILE_USERLIST_VALIDATE_EMAIL: N
 +2019/01/30 14:24:28  INFO:
 +2019/01/30 14:24:28  INFO: Check if command '/bin/dsync' was found....................[ OK ]
 +2019/01/30 14:24:28  INFO: Check if command '/bin/tar' was found......................[ OK ]
 +2019/01/30 14:24:28  INFO: Check if command '/bin/touch' was found....................[ OK ]
 +2019/01/30 14:24:28  INFO: Check if command '/bin/rm' was found.......................[ OK ]
 +2019/01/30 14:24:28  INFO: Check if command '/bin/cat' was found......................[ OK ]
 +2019/01/30 14:24:28  INFO: Check if command '/bin/date' was found.....................[ OK ]
 +2019/01/30 14:24:28  INFO: Check if command '/bin/mkdir' was found....................[ OK ]
 +2019/01/30 14:24:28  INFO: Check if command '/bin/chown' was found....................[ OK ]
 +2019/01/30 14:24:28  INFO: Check if command '/bin/chmod' was found....................[ OK ]
 +2019/01/30 14:24:28  INFO: Check if command '/bin/grep' was found.....................[ OK ]
 +2019/01/30 14:24:28  INFO: Check if command '/sbin/sendmail' was found................[ OK ]
 +2019/01/30 14:24:28  INFO: Check if script is NOT already runnig .....................[ OK ]
 +2019/01/30 14:24:28  INFO: Check if DIR_BACKUP exists.................................[ OK ]
 +2019/01/30 14:24:28  INFO:
 +2019/01/30 14:24:28  INFO: Check if the variable FILE_USERLIST is set.................[ NO ]
 +2019/01/30 14:24:28  INFO: Mailboxes to backup will be determined by doveadm user "*".
 +2019/01/30 14:24:28  INFO:
 +2019/01/30 14:24:28  INFO:
 +2019/01/30 14:24:28  INFO: +-----------------------------------------------------------------+
 +2019/01/30 14:24:28  INFO: | Run backup dovecot_backup ..................................... |
 +2019/01/30 14:24:28  INFO: +-----------------------------------------------------------------+
 +2019/01/30 14:24:28  INFO:
 +2019/01/30 14:24:29  INFO: Start backup process for user: klaus@tachtler.net ...
 +2019/01/30 14:24:29  INFO: Extract mailbox data for user: klaus@tachtler.net ...
 +2019/01/30 14:27:43  INFO: Synchronization done for user: klaus@tachtler.net ...
 +2019/01/30 14:27:43  INFO: Packaging to archive for user: klaus@tachtler.net ...
 +2019/01/30 14:27:48  INFO: Delete archive files for user: klaus@tachtler.net ...
 +2019/01/30 14:27:48  INFO: Delete old archive files /srv/backup .....................[ OK ]
 +2019/01/30 14:27:48  INFO: Delete mailbox files for user: klaus@tachtler.net ...
 +2019/01/30 14:27:48  INFO: Delete mailbox files at: /srv/backup .....................[ OK ]
 +2019/01/30 14:27:48  INFO: Ended backup process for user: klaus@tachtler.net ...
 +2019/01/30 14:27:48  INFO:
 +2019/01/30 14:27:48  INFO: Start backup process for user: petra@tachtler.net ...
 +2019/01/30 14:27:48  INFO: Extract mailbox data for user: petra@tachtler.net ...
 +2019/01/30 14:27:56  INFO: Synchronization done for user: petra@tachtler.net ...
 +2019/01/30 14:27:56  INFO: Packaging to archive for user: petra@tachtler.net ...
 +2019/01/30 14:27:57  INFO: Delete archive files for user: petra@tachtler.net ...
 +2019/01/30 14:27:57  INFO: Delete old archive files /srv/backup .....................[ OK ]
 +2019/01/30 14:27:57  INFO: Delete mailbox files for user: petra@tachtler.net ...
 +2019/01/30 14:27:57  INFO: Delete mailbox files at: /srv/backup .....................[ OK ]
 +2019/01/30 14:27:57  INFO: Ended backup process for user: petra@tachtler.net ...
 +2019/01/30 14:28:01  INFO:
 +2019/01/30 14:28:01  INFO: +-----------------------------------------------------------------+
 +2019/01/30 14:28:01  INFO: | End backup dovecot_backup ..................................... |
 +2019/01/30 14:28:01  INFO: +-----------------------------------------------------------------+
 +2019/01/30 14:28:01  INFO:
 +2019/01/30 14:28:01  INFO: +-----------------------------------------------------------------+
 +2019/01/30 14:28:01  INFO: | Runtime statistics............................................. |
 +2019/01/30 14:28:01  INFO: +-----------------------------------------------------------------+
 +2019/01/30 14:28:01  INFO:
 +2019/01/30 14:28:01  INFO: - Number of determined users: 2
 +2019/01/30 14:28:01  INFO: - ...Summary of failed users: 0
 +2019/01/30 14:28:01  INFO:
 +2019/01/30 14:28:01  INFO: Runtime: 00:03:33 time elapsed.
 +2019/01/30 14:28:01  INFO:
 +2019/01/30 14:28:01  INFO: +-----------------------------------------------------------------+
 +2019/01/30 14:28:01  INFO: | Finished creating the backups [Wed, 30 Jan 2019 14:28:01 (CET)] |
 +2019/01/30 14:28:01  INFO: +-----------------------------------------------------------------+
 +2019/01/30 14:28:01  INFO:
 +</code>
 +
 +**__MIT__ ''FILE_USERLIST'':**
 <code> <code>
-2017/01/11 15:28:38  INFO: +2019/01/30 15:07:51  INFO: +-----------------------------------------------------------------+ 
-2017/01/11 15:28:38  INFO: +-----------------------------------------------------------------+ +2019/01/30 15:07:51  INFO: | Start backup of the mailboxes [Wed, 30 Jan 2019 15:07:51 (CET)] 
-2017/01/11 15:28:38  INFO: | Start backup the mailboxes of dovecot server................... +2019/01/30 15:07:51  INFO: +-----------------------------------------------------------------+ 
-2017/01/11 15:28:38  INFO: +-----------------------------------------------------------------+ +2019/01/30 15:07:51  INFO: 
-2017/01/11 15:28:38  INFO: +2019/01/30 15:07:51  INFO: SCRIPT_NAME.................dovecot_backup 
-2017/01/11 15:28:38  INFO: Run script with following parameter+2019/01/30 15:07:51  INFO: 
-2017/01/11 15:28:38  INFO: +2019/01/30 15:07:51  INFO: DIR_BACKUP..................: /srv/backup 
-2017/01/11 15:28:38  INFO: SCRIPT_NAME...: dovecot_backup +2019/01/30 15:07:51  INFO: 
-2017/01/11 15:28:38  INFO: +2019/01/30 15:07:51  INFO: MAIL_RECIPIENT..............: you@example.com 
-2017/01/11 15:28:38  INFO: DIR_BACKUP....: /srv/backup +2019/01/30 15:07:51  INFO: MAIL_STATUS.................: N 
-2017/01/11 15:28:38  INFO: +2019/01/30 15:07:51  INFO: 
-2017/01/11 15:28:38  INFO: MAIL_RECIPIENTroot@tachtler.net +2019/01/30 15:07:51  INFO: FILE_USERLIST.............../srv/dovecot_backup.userlist 
-2017/01/11 15:28:38  INFO: MAIL_STATUS...N +2019/01/30 15:07:51  INFO: FILE_USERLIST_VALIDATE_EMAILY 
-2017/01/11 15:28:38  INFO: +2019/01/30 15:07:51  INFO: 
-2017/01/11 15:28:38  INFO: Check if command '/bin/dsync' was found....................[ OK ] +2019/01/30 15:07:51  INFO: Check if command '/bin/dsync' was found....................[ OK ] 
-2017/01/11 15:28:38  INFO: Check if command '/bin/tar' was found......................[ OK ] +2019/01/30 15:07:51  INFO: Check if command '/bin/tar' was found......................[ OK ] 
-2017/01/11 15:28:38  INFO: Check if command '/bin/touch' was found....................[ OK ] +2019/01/30 15:07:51  INFO: Check if command '/bin/touch' was found....................[ OK ] 
-2017/01/11 15:28:38  INFO: Check if command '/bin/rm' was found.......................[ OK ] +2019/01/30 15:07:51  INFO: Check if command '/bin/rm' was found.......................[ OK ] 
-2017/01/11 15:28:38  INFO: Check if command '/bin/cat' was found......................[ OK ] +2019/01/30 15:07:51  INFO: Check if command '/bin/cat' was found......................[ OK ] 
-2017/01/11 15:28:38  INFO: Check if command '/bin/date' was found.....................[ OK ] +2019/01/30 15:07:51  INFO: Check if command '/bin/date' was found.....................[ OK ] 
-2017/01/11 15:28:38  INFO: Check if command '/bin/mkdir' was found....................[ OK ] +2019/01/30 15:07:51  INFO: Check if command '/bin/mkdir' was found....................[ OK ] 
-2017/01/11 15:28:38  INFO: Check if command '/bin/chown' was found....................[ OK ] +2019/01/30 15:07:51  INFO: Check if command '/bin/chown' was found....................[ OK ] 
-2017/01/11 15:28:38  INFO: Check if command '/bin/chmod' was found....................[ OK ] +2019/01/30 15:07:51  INFO: Check if command '/bin/chmod' was found....................[ OK ] 
-2017/01/11 15:28:38  INFO: Check if command '/sbin/sendmail' was found................[ OK ] +2019/01/30 15:07:51  INFO: Check if command '/bin/grep' was found.....................[ OK ] 
-2017/01/11 15:28:38  INFO: Check if script is NOT already runnig .....................[ OK ] +2019/01/30 15:07:51  INFO: Check if command '/sbin/sendmail' was found................[ OK ] 
-2017/01/11 15:28:38  INFO: Check if DIR_BACKUP exists.................................[ OK ] +2019/01/30 15:07:51  INFO: Check if script is NOT already runnig .....................[ OK ] 
-2017/01/11 15:28:38  INFO: +2019/01/30 15:07:51  INFO: Check if DIR_BACKUP exists.................................[ OK ] 
-2017/01/11 15:28:38  INFO: +-----------------------------------------------------------------+ +2019/01/30 15:07:51  INFO: 
-2017/01/11 15:28:38  INFO: | Run backup dovecot_backup ..................................... | +2019/01/30 15:07:51  INFO: Check if the variable FILE_USERLIST is set.................[ OK ] 
-2017/01/11 15:28:38  INFO: +-----------------------------------------------------------------+ +2019/01/30 15:07:51  INFO: Mailboxes to backup will read from file. 
-2017/01/11 15:28:38  INFO: +2019/01/30 15:07:51  INFO: 
-2017/01/11 15:28:39  INFO: Start backup process for user: klaus@tachtler.net ... +2019/01/30 15:07:51  INFO: - File: [/home/klaus/dovecot_backup.userlist] 
-2017/01/11 15:28:39  INFO: Extract mailbox data for user: klaus@tachtler.net ... +2019/01/30 15:07:51  INFO: - Check if FILE_USERLIST exists............................[ OK ] 
-2017/01/11 15:29:46  INFO: Packaging to archive for user: klaus@tachtler.net ... +2019/01/30 15:07:51  INFO: - Check if FILE_USERLIST is readable.......................[ OK ] 
-2017/01/11 15:29:49  INFO: Delete archive files for user: klaus@tachtler.net ... +2019/01/30 15:07:51  INFO: 
-2017/01/11 15:29:49  INFO: Delete old archive files /srv/backup ...................[FAILED+2019/01/30 15:07:51  INFO: ERROR: The user: notvaild_email.net is NOT valid e-mail address! 
-2017/01/11 15:29:49  INFO: Delete mailbox files for user: klaus@tachtler.net ... +2019/01/30 15:07:51  INFO: 
-2017/01/11 15:29:49  INFO: Delete mailbox files at: /srv/backup ...................[ OK ] +2019/01/30 15:07:51  INFO: +-----------------------------------------------------------------+ 
-2017/01/11 15:29:49  INFO: Ended backup process for user: klaus@tachtler.net ... +2019/01/30 15:07:51  INFO: | Run backup dovecot_backup ..................................... | 
-2017/01/11 15:29:49  INFO: +2019/01/30 15:07:51  INFO: +-----------------------------------------------------------------+ 
-2017/01/11 15:29:49  INFO: Start backup process for user: petra@tachtler.net ... +2019/01/30 15:07:51  INFO: 
-2017/01/11 15:29:49  INFO: Extract mailbox data for user: petra@tachtler.net ... +2019/01/30 15:07:51  INFO: Start backup process for user: klaus@tachtler.net ... 
-2017/01/11 15:29:58  INFO: Packaging to archive for user: petra@tachtler.net ... +2019/01/30 15:07:51  INFO: Extract mailbox data for user: klaus@tachtler.net ... 
-2017/01/11 15:30:00  INFO: Delete archive files for user: petra@tachtler.net ... +2019/01/30 15:07:54  INFO: Synchronization done for user: klaus@tachtler.net ... 
-2017/01/11 15:30:00  INFO: Delete old archive files /srv/backup ...................[FAILED+2019/01/30 15:07:54  INFO: Packaging to archive for user: klaus@tachtler.net ... 
-2017/01/11 15:30:00  INFO: Delete mailbox files for user: petra@tachtler.net ... +2019/01/30 15:07:54  INFO: Delete archive files for user: klaus@tachtler.net ... 
-2017/01/11 15:30:00  INFO: Delete mailbox files at: /srv/backup ...................[ OK ] +2019/01/30 15:07:54  INFO: Delete old archive files /srv/backup .....................[ OK 
-2017/01/11 15:30:00  INFO: Ended backup process for user: petra@tachtler.net ... +2019/01/30 15:07:54  INFO: Delete mailbox files for user: klaus@tachtler.net ... 
-2017/01/11 15:30:02  INFO: +2019/01/30 15:07:54  INFO: Delete mailbox files at: /srv/backup .....................[ OK ] 
-2017/01/11 15:30:02  INFO: +2019/01/30 15:07:54  INFO: Ended backup process for user: klaus@tachtler.net ... 
-2017/01/11 15:30:02  INFO: +-----------------------------------------------------------------+ +2019/01/30 15:07:54  INFO: 
-2017/01/11 15:30:02  INFO: | End backup dovecot_backup ..................................... | +2019/01/30 15:07:54  INFO: Start backup process for user: petra@tachtler.net ... 
-2017/01/11 15:30:02  INFO: +-----------------------------------------------------------------+ +2019/01/30 15:07:54  INFO: Extract mailbox data for user: petra@tachtler.net ... 
-2017/01/11 15:30:02  INFO: +2019/01/30 15:07:56  INFO: Synchronization done for user: petra@tachtler.net ... 
-2017/01/11 15:30:02  INFO: +-----------------------------------------------------------------+ +2019/01/30 15:07:56  INFO: Packaging to archive for user: petra@tachtler.net ... 
-2017/01/11 15:30:02  INFO: | Runntime statistics............................................ | +2019/01/30 15:07:56  INFO: Delete archive files for user: petra@tachtler.net ... 
-2017/01/11 15:30:02  INFO: +-----------------------------------------------------------------+ +2019/01/30 15:07:56  INFO: Delete old archive files /srv/backup .....................[ OK 
-2017/01/11 15:30:02  INFO: +2019/01/30 15:07:56  INFO: Delete mailbox files for user: petra@tachtler.net ... 
-2017/01/11 15:30:02  INFO: - Number of determined users: 2 +2019/01/30 15:07:56  INFO: Delete mailbox files at: /srv/backup .....................[ OK ] 
-2017/01/11 15:30:02  INFO: - ...Summary of failed users: 0 +2019/01/30 15:07:56  INFO: Ended backup process for user: petra@tachtler.net ... 
-2017/01/11 15:30:02  INFO: +2019/01/30 15:07:56  INFO: 
-2017/01/11 15:30:02  INFO: +-----------------------------------------------------------------+ +2019/01/30 15:07:56  INFO: +-----------------------------------------------------------------+ 
-2017/01/11 15:30:02  INFO: | Finish......................................................... +2019/01/30 15:07:56  INFO: | End backup dovecot_backup ..................................... | 
-2017/01/11 15:30:02  INFO: +-----------------------------------------------------------------+ +2019/01/30 15:07:56  INFO: +-----------------------------------------------------------------+ 
-2017/01/11 15:30:02  INFO:+2019/01/30 15:07:56  INFO: 
 +2019/01/30 15:07:56  INFO: +-----------------------------------------------------------------+ 
 +2019/01/30 15:07:56  INFO: | Runtime statistics............................................. | 
 +2019/01/30 15:07:56  INFO: +-----------------------------------------------------------------+ 
 +2019/01/30 15:07:56  INFO: 
 +2019/01/30 15:07:56  INFO: - Number of determined users: 3 
 +2019/01/30 15:07:56  INFO: - ...Summary of failed users: 1 
 +2019/01/30 15:07:56  INFO: - ...Mailbox of failed users: 
 +2019/01/30 15:07:56  INFO: - ... notvaild_email.net 
 +2019/01/30 15:07:56  INFO: 
 +2019/01/30 15:07:56  INFO: Runtime: 00:00:05 time elapsed. 
 +2019/01/30 15:07:56  INFO: 
 +2019/01/30 15:07:56  INFO: +-----------------------------------------------------------------+ 
 +2019/01/30 15:07:56  INFO: | Finished creating the backups [Wed, 30 Jan 2019 15:07:56 (CET)] 
 +2019/01/30 15:07:56  INFO: +-----------------------------------------------------------------+ 
 +2019/01/30 15:07:56  INFO:
 </code> </code>
  
tachtler/dovecot_backup_-_skript.txt · Zuletzt geändert: 2023/07/05 19:07 von klaus