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
tachtler:dovecot_backup_-_skript [2019/01/30 15:52] – [Skript] klaustachtler:dovecot_backup_-_skript [2023/07/05 19:07] (aktuell) – [Dovecot Backup - Skript] 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}} |+| Linux-Magazin | [[http://www.linux-magazin.de/ausgaben/2018/06/backups-von-e-mails/|Wie Admins ihre Mailserver vor Datenverlust schützen]]\\ [[https://www.linux-magazin.de/ausgaben/2018/06/backups-von-e-mails/4/|Wie Admins ihre Mailserver vor Datenverlust schützen (Seite 4) - Erwähnung]]\\ {{ :tachtler:protected:054-058_email_backup_v2.pdf |Artikel aus Ausgabe 06/2018 - geschützt}} |
 | 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 22: Zeile 22:
 Password:  Password: 
 </code> </code>
 +
 +===== Zstandard (zstd) =====
 +
 +Für den Einsatz der Komprimierungsmethode [[https://de.wikipedia.org/wiki/Zstandard|Zstandard (zstd)]] ist es ggf. erforderlich, das Programm **''zstd''** zu installieren.
 +
 +**__CentOS 7__**
 +
 +Zur Installation von [[https://de.wikipedia.org/wiki/Zstandard|Zstandard (zstd)]] über ein **''rpm''**-Paket, soll hier das Repository eines Drittanbieters genutzt werden, da [[https://de.wikipedia.org/wiki/Zstandard|Zstandard (zstd)]] **__nicht__** im [[http://centos.org|CentOS]]-Repository enthalten ist.
 +
 +Nachfolgend soll das Repository des Drittanbieters [[https://fedoraproject.org/wiki/EPEL|EPEL]] genutzt werden. Eine Anleitung, wie das Repository des Drittanbieters [[https://fedoraproject.org/wiki/EPEL|EPEL]] eingebunden werden könnte, kann unter nachfolgendem internen Link nachgelesen werden:
 +  * [[tachtler:epel_centos_7|EPEL CentOS 7]]
 +
 +Zur Installation der Komprimierungsmethode [[https://de.wikipedia.org/wiki/Zstandard|Zstandard (zstd)]] wird nachfolgendes Paket benötigt:
 +  * **''zstd''** - ist im ''epel''-Repository des Drittanbieters [[https://fedoraproject.org/wiki/EPEL|EPEL]] enthalten
 +
 +Mit nachfolgendem Befehl, werden die benötigten Pakete installiert:
 +<code>
 +# yum install zstd
 +Loaded plugins: changelog, priorities
 +234 packages excluded due to repository priority protections
 +Resolving Dependencies
 +--> Running transaction check
 +---> Package zstd.x86_64 0:1.5.0-1.el7 will be installed
 +--> Finished Dependency Resolution
 +
 +Changes in packages about to be updated:
 +
 +
 +Dependencies Resolved
 +
 +================================================================================
 + Package         Arch              Version                Repository       Size
 +================================================================================
 +Installing:
 + zstd            x86_64            1.5.0-1.el7            epel            649 k
 +
 +Transaction Summary
 +================================================================================
 +Install  1 Package
 +
 +Total download size: 649 k
 +Installed size: 2.1 M
 +Is this ok [y/d/N]: y
 +Downloading packages:
 +zstd-1.5.0-1.el7.x86_64.rpm                                | 649 kB   00:00     
 +Running transaction check
 +Running transaction test
 +Transaction test succeeded
 +Running transaction
 +  Installing : zstd-1.5.0-1.el7.x86_64                                      1/1 
 +  Verifying  : zstd-1.5.0-1.el7.x86_64                                      1/1 
 +
 +Installed:
 +  zstd.x86_64 0:1.5.0-1.el7                                                     
 +
 +Complete!
 +</code>
 +
 +Mit nachfolgendem Befehl kann überprüft werden, welcher Inhalt mit dem Paket installiert wurde.
 +
 +Paket **zstd**:
 +<code>
 +# rpm -qil zstd
 +Name        : zstd
 +Version     : 1.5.0
 +Release     : 1.el7
 +Architecture: x86_64
 +Install Date: Sat 02 Oct 2021 07:40:55 AM CEST
 +Group       : Unspecified
 +Size        : 2178120
 +License     : BSD and GPLv2
 +Signature   : RSA/SHA256, Mon 17 May 2021 03:12:58 AM CEST, Key ID 6a2faea2352c64e5
 +Source RPM  : zstd-1.5.0-1.el7.src.rpm
 +Build Date  : Sun 16 May 2021 10:13:19 PM CEST
 +Build Host  : buildhw-x86-12.iad2.fedoraproject.org
 +Relocations : (not relocatable)
 +Packager    : Fedora Project
 +Vendor      : Fedora Project
 +URL         : https://github.com/facebook/zstd
 +Bug URL     : https://bugz.fedoraproject.org/zstd
 +Summary     : Zstd compression library
 +Description :
 +Zstd, short for Zstandard, is a fast lossless compression algorithm,
 +targeting real-time compression scenarios at zlib-level compression ratio.
 +/usr/bin/pzstd
 +/usr/bin/unzstd
 +/usr/bin/zstd
 +/usr/bin/zstdcat
 +/usr/bin/zstdgrep
 +/usr/bin/zstdless
 +/usr/bin/zstdmt
 +/usr/share/doc/zstd-1.5.0
 +/usr/share/doc/zstd-1.5.0/CHANGELOG
 +/usr/share/doc/zstd-1.5.0/README.md
 +/usr/share/licenses/zstd-1.5.0
 +/usr/share/licenses/zstd-1.5.0/COPYING
 +/usr/share/licenses/zstd-1.5.0/LICENSE
 +/usr/share/man/man1/pzstd.1.gz
 +/usr/share/man/man1/unzstd.1.gz
 +/usr/share/man/man1/zstd.1.gz
 +/usr/share/man/man1/zstdcat.1.gz
 +/usr/share/man/man1/zstdgrep.1.gz
 +/usr/share/man/man1/zstdless.1.gz
 +</code>
 +
 +
  
 ===== Backup ===== ===== Backup =====
  
-Nachfolgendes Skript ermöglicht die Erstellung einer ***.tar.gz**-Datei +Nachfolgendes Skript ermöglicht die Erstellung einer ***.tar.gz**-Datei oder eine ***.tar.zst**-Datei
   * von **__allen__** Benutzerkonten   * von **__allen__** Benutzerkonten
   * **__oder__** über **__eine Datei mit E-Mail-Adressen__**, der zu sichernden 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 oder *.tar.zst-Datei__**
   * auf **__Dateiebene__**   * auf **__Dateiebene__**
   * mit **__konfigurierbaren Parametern__**   * mit **__konfigurierbaren Parametern__**
Zeile 44: Zeile 150:
 # CUSTOM - Script-Name. # CUSTOM - Script-Name.
 SCRIPT_NAME='dovecot_backup' SCRIPT_NAME='dovecot_backup'
 +
 +# CUSTOM - Backup-Files compression method - (possible values: gz zst).
 +COMPRESSION='gz'
  
 # CUSTOM - Backup-Files. # CUSTOM - Backup-Files.
 +TMP_FOLDER='/srv/backup'
 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.$COMPRESSION 
-FILE_DELETE='*.tar.gz'+FILE_DELETE=$(printf '*.tar.%s$COMPRESSION)
 BACKUPFILES_DELETE=14 BACKUPFILES_DELETE=14
  
Zeile 59: Zeile 169:
 # CUSTOM - Path and file name of a file with e-mail addresses to backup, if # 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. #          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'+# FILE_USERLIST='/path/and/file/name/of/user/list/with/one/user/per/line'
 # - OR - # - OR -
 # FILE_USERLIST='' # FILE_USERLIST=''
 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.
-MAIL_RECIPIENT='root@tachtler.net'+MAIL_RECIPIENT='you@example.com'
  
 # CUSTOM - Status-Mail [Y|N]. # CUSTOM - Status-Mail [Y|N].
Zeile 78: Zeile 192:
 ^ Parametername          ^ Beschreibung                                                                            ^ ^ Parametername          ^ Beschreibung                                                                            ^
 | ''SCRIPT_NAME''        | Name des Skriptes                                                                       | | ''SCRIPT_NAME''        | Name des Skriptes                                                                       |
-| ''DIR_BACKUP''         | Verzeichnis in dem die Backup-Dateien erstellt werden sollen                            |+| ''COMPRESSION''        | Art der zu verwendenden Komprimierungsmethode, je nach **Endung** (''zst'' = **''zstd''** oder ''gz'' = **''gzip''**) | 
 +| ''TMP_FOLDER''         | Verzeichnis in dem ein temporärer Ordner erstellt werden soll, um die Backup-Dateien temporär zu extrahiert, damit diese dann abschliessend in ein Archivformat (tar.gz) zu packen                            | 
 +| ''DIR_BACKUP''         | Verzeichnis in dem die Backup-Dateien abgelegt werden sollen                            |
 | ''FILE_BACKUP''        | **Allgemeiner Teil** der Bezeichnung für die Backup-Dateien                             | | ''FILE_BACKUP''        | **Allgemeiner Teil** der Bezeichnung für die Backup-Dateien                             |
 | ''FILE_DELETE''        | **Endung** zur Löschung von älteren Archivdateien, **muss wie ''FILE_BACKUP'' enden !** | | ''FILE_DELETE''        | **Endung** zur Löschung von älteren Archivdateien, **muss wie ''FILE_BACKUP'' enden !** |
Zeile 86: Zeile 202:
 | ''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 E-Mail-Adressen (eine pro Zeile), welche Mailboxen/Benutzer gesichert werden, anstelle der Ermittlung durch ''doveadm user ”*”'', um nicht alle Mailboxen/Benutzer zwangsweise zu sichern |+| ''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_RECIPIENT''     | **Empfänger** E-Mail-Adresse für E-Mails des Skripts |
 | ''MAIL_STATUS''        | Versand einer **Status** E-Mail nach erfolgreicher Skript Ausführung | | ''MAIL_STATUS''        | Versand einer **Status** E-Mail nach erfolgreicher Skript Ausführung |
Zeile 112: Zeile 229:
  
 <code bash> <code bash>
-#!/bin/bash+#!/usr/bin/env bash
  
 ############################################################################## ##############################################################################
Zeile 121: Zeile 238:
 #               will be send by e-mail.                                      # #               will be send by e-mail.                                      #
 #                                                                            # #                                                                            #
-# Last update : 30.01.2019                                                   # +# Last update : 03.07.2023                                                   # 
-# Version     : 1.08                                                         #+# Version     : 1.20                                                         #
 #                                                                            # #                                                                            #
 # Author      : Klaus Tachtler, <klaus@tachtler.net>                         # # Author      : Klaus Tachtler, <klaus@tachtler.net>                         #
Zeile 131: Zeile 248:
 #  | This program is free software; you can redistribute it and/or modify |  # #  | This program is free software; you can redistribute it and/or modify |  #
 #  | it under the terms of the GNU General Public License as published by |  # #  | it under the terms of the GNU General Public License as published by |  #
-#  | the Free Software Foundation; either version of the License, or    |  #+#  | the Free Software Foundation; either version of the License, or    |  #
 #  | (at your option) any later version.                                  |  # #  | (at your option) any later version.                                  |  #
 #  +----------------------------------------------------------------------+  # #  +----------------------------------------------------------------------+  #
 #                                                                            # #                                                                            #
-# Copyright (c) 2019 by Klaus Tachtler.                                      #+# Copyright (c) 2023 by Klaus Tachtler.                                      #
 #                                                                            # #                                                                            #
 ############################################################################## ##############################################################################
Zeile 194: Zeile 311:
 #               Add the calculation of the script runtime.                   # #               Add the calculation of the script runtime.                   #
 #               Thanks to graue Ritter.                                      # #               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     : 1.10                                                         #
 +# Description : Code redesign.                                               #
 +# -------------------------------------------------------------------------- #
 +# Version     : 1.11                                                         #
 +# Description : GitHub Issue #12                                             #
 +#               Change of the temporary storage medium from DIR_BACKUP to    #
 +#               TMP_FOLDER for temporary storage of extracted emails from    #
 +#               the mailboxes was introduced. This allows the use of a       #
 +#               temporary storage of the extracted emails from the mailboxes #
 +#               on a faster storage medium, or also on a local storage       #
 +#               medium, which avoids rights problems if DIR_BACKUP is e.g.   #
 +#               an NFS mounted storage.                                      #
 +#               Thanks to Krisztián Hamar.                                   #
 +# -------------------------------------------------------------------------- #
 +# Version     : 1.12                                                         #
 +# Description : GitHub: Issue #13                                            #
 +#               Change in mv command detection due to initial problems with  #
 +#               Ubuntu 18.04 LTS.                                            #
 +#               Thanks to hatted.                                            #
 +# -------------------------------------------------------------------------- #
 +# Version     : 1.13                                                         #
 +# Description : GitHub: Issue #16                                            #
 +#               Changed the timezone format to hours: for example (+0100) at #
 +#               VAR_EMAILDATE, because not all e-Mail user interfaces can    #
 +#               handle the letter time zone notation.                        #
 +#               Thanks to velzebop.                                          #
 +# -------------------------------------------------------------------------- #
 +# Version     : 1.14                                                         #
 +# Description : GitHub: Issue #18                                            #
 +#               Add dash '-' and dot '.' to the list of valid chars for the  #
 +#               e-Mail address validation for the localpart and the          #
 +#               domainpart.                                                  #
 +#               Thanks to Henrocker.                                         #
 +# -------------------------------------------------------------------------- #
 +# Version     : 1.15                                                         #
 +# Description : GitHub: Issue #21                                            #
 +#               Set the required ownership on TMP_FOLDER before running the  #
 +#               script.                                                      #
 +#               Thanks to LarsBel.                                           #
 +# -------------------------------------------------------------------------- #
 +# Version     : 1.16                                                         #
 +# Description : Optimize ownership settings for TMP_FOLDER and DIR_BACKUP.   #
 +# -------------------------------------------------------------------------- #
 +# Version     : 1.17                                                         #
 +# Description : GitHub: Issue #22.                                           #
 +#               Bugfix - movelog does not work properly when an email is to  #
 +#               be sent due to an error, or a status email has been          #
 +#               requested.                                                   #
 +#               Thanks to selbitschka.                                       #
 +# -------------------------------------------------------------------------- #
 +# Version     : 1.18                                                         #
 +# Description : Introduction of zstd compression as an alternative choice to #
 +#               gzip compression. So now by setting the variable COMPRESSION #
 +#               the type of compression can be selected between zst and gz.  #
 +#               The zstd compression can lower the execution time by half.   #
 +#               The design of the code was also revised.                     #
 +#               The error handling was also been improved.                   #
 +#               Thanks to Marco De Lellis.                                   #
 +# -------------------------------------------------------------------------- #
 +# Version     : 1.19                                                         #
 +# Description : GitHub: Issue #24                                            #
 +#               Correct the license mismatch between GitHub and the script.  #
 +#               Thanks to David Haerdeman (Alphix).                          #
 +# -------------------------------------------------------------------------- #
 +# Version     : 1.20                                                         #
 +# Description : GitHub: Pull request #26                                     #
 +#               Improved FreeBSD compatibility.                              #
 +#               Thanks to wombelix (Dominik Wombacher)                       #
 # -------------------------------------------------------------------------- # # -------------------------------------------------------------------------- #
 # Version     : x.xx                                                         # # Version     : x.xx                                                         #
Zeile 206: Zeile 397:
 # CUSTOM - Script-Name. # CUSTOM - Script-Name.
 SCRIPT_NAME='dovecot_backup' SCRIPT_NAME='dovecot_backup'
 +
 +# CUSTOM - Backup-Files compression method - (possible values: gz zst).
 +COMPRESSION='gz'
  
 # CUSTOM - Backup-Files. # CUSTOM - Backup-Files.
 +TMP_FOLDER='/srv/backup'
 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.$COMPRESSION 
-FILE_DELETE='*.tar.gz'+FILE_DELETE=$(printf '*.tar.%s$COMPRESSION)
 BACKUPFILES_DELETE=14 BACKUPFILES_DELETE=14
  
Zeile 221: Zeile 416:
 # CUSTOM - Path and file name of a file with e-mail addresses to backup, if # 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. #          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'+# FILE_USERLIST='/path/and/file/name/of/user/list/with/one/user/per/line'
 # - OR - # - OR -
 # FILE_USERLIST='' # FILE_USERLIST=''
 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 237: Zeile 436:
  
 # Variables. # Variables.
-DSYNC_COMMAND=`command -v dsync` 
 TAR_COMMAND=`command -v tar` TAR_COMMAND=`command -v tar`
 +GZIP_COMMAND=`command -v gzip`
 +ZSTD_COMMAND=`command -v zstd`
 TOUCH_COMMAND=`command -v touch` TOUCH_COMMAND=`command -v touch`
 RM_COMMAND=`command -v rm` RM_COMMAND=`command -v rm`
Zeile 247: Zeile 447:
 CHOWN_COMMAND=`command -v chown` CHOWN_COMMAND=`command -v chown`
 CHMOD_COMMAND=`command -v chmod` CHMOD_COMMAND=`command -v chmod`
 +MKTEMP_COMMAND=`command -v mktemp`
 GREP_COMMAND=`command -v grep` GREP_COMMAND=`command -v grep`
 +MV_COMMAND=`command which mv`
 +STAT_COMMAND=`command -v stat`
 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 255: Zeile 458:
 VAR_HOSTNAME=`uname -n` VAR_HOSTNAME=`uname -n`
 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_LISTED_USER=()
 declare -a VAR_FAILED_USER=() declare -a VAR_FAILED_USER=()
 VAR_COUNT_USER=0 VAR_COUNT_USER=0
 VAR_COUNT_FAIL=0 VAR_COUNT_FAIL=0
 +
 +# FreeBSD specific commands
 +if [ "$OSTYPE" = "FreeBSD" ]; then
 +        DSYNC_COMMAND=`command -v doveadm`
 +        STAT_COMMAND_PARAM_FORMAT='-f'
 +        STAT_COMMAND_ARG_FORMAT_USER='%Su'
 +        STAT_COMMAND_ARG_FORMAT_GROUP='%Sg'
 +        MKTEMP_COMMAND_PARAM_ARG="-d ${TMP_FOLDER}/${SCRIPT_NAME}-XXXXXXXXXXXX"
 +else
 + DSYNC_COMMAND=`command -v dsync`
 +        STAT_COMMAND_PARAM_FORMAT='-c'
 +        STAT_COMMAND_ARG_FORMAT_USER='%U'
 +        STAT_COMMAND_ARG_FORMAT_GROUP='%G'
 +        MKTEMP_COMMAND_PARAM_ARG="-d -p ${TMP_FOLDER} -t ${SCRIPT_NAME}-XXXXXXXXXXXX"
 +fi
  
 # Functions. # Functions.
Zeile 278: Zeile 496:
  
 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 307: Zeile 525:
 $RM_COMMAND -f $FILE_MAIL $RM_COMMAND -f $FILE_MAIL
  
 +}
 +
 +function error () {
 + # Parameters.
 + CODE_ERROR="$1"
 +
 +        sendmail ERROR
 + movelog
 + exit $CODE_ERROR
 +}
 +
 +function headerblock () {
 + # Parameters.
 + TEXT_INPUT="$1"
 + LINE_COUNT=68
 +
 +        # Help variables.
 +        WORD_COUNT=`echo $TEXT_INPUT | wc -c`
 +        CHAR_AFTER=`expr $LINE_COUNT - $WORD_COUNT - 5`
 +        LINE_SPACE=`expr $LINE_COUNT - 3`
 +
 + # Format placeholder.
 + if [ "$CHAR_AFTER" -lt "0" ]; then
 + CHAR_AFTER="0"
 + fi
 +
 + printf -v char '%*s' $CHAR_AFTER ''
 + printf -v line '%*s' $LINE_SPACE ''
 +
 + log "+${line// /-}+"
 + log "| $TEXT_INPUT${char// /.} |"
 + log "+${line// /-}+"
 +}
 +
 +function logline () {
 + # Parameters.
 + TEXT_INPUT="$1"
 + TRUE_FALSE="$2"
 + LINE_COUNT=68
 +
 +        # Help variables.
 +        WORD_COUNT=`echo $TEXT_INPUT | wc -c`
 +        CHAR_AFTER=`expr $LINE_COUNT - $WORD_COUNT - 9`
 +
 + # Format placeholder.
 + if [ "$CHAR_AFTER" -lt "0" ]; then
 + CHAR_AFTER="0"
 + fi
 +
 + printf -v char '%*s' $CHAR_AFTER ''
 +
 + if [ "$TRUE_FALSE" == "true" ]; then
 + log "$TEXT_INPUT${char// /.}[  OK  ]"
 + else
 + log "$TEXT_INPUT${char// /.}[FAILED]"
 + fi
 +}
 +
 +function checkcommand () {
 + # Parameters.
 +        CHECK_COMMAND="$1"
 +
 + if [ ! -s "$1" ]; then
 + logline "Check if command '$CHECK_COMMAND' was found " false
 + error 10
 + else
 + logline "Check if command '$CHECK_COMMAND' was found " true
 + fi
 } }
  
Zeile 312: Zeile 598:
 log "" log ""
 RUN_TIMESTAMP=`$DATE_COMMAND '+%s'` RUN_TIMESTAMP=`$DATE_COMMAND '+%s'`
-log "+-----------------------------------------------------------------+" +headerblock "Start backup of the mailboxes [`$DATE_COMMAND '+%a, %d %b %Y %H:%M:%S (%z)'`]"
-log "Start backup of the mailboxes [`$DATE_COMMAND '+%a, %d %b %Y %H:%M:%S (%Z)'`] |" +
-log "+-----------------------------------------------------------------+"+
 log "" log ""
-log "Run script with following parameter:"+log "SCRIPT_NAME.................$SCRIPT_NAME"
 log "" log ""
-log "SCRIPT_NAME...: $SCRIPT_NAME"+log "OS_TYPE.....................: $OSTYPE"
 log "" log ""
-log "DIR_BACKUP....: $DIR_BACKUP"+log "COMPRESSION.................: $COMPRESSION"
 log "" log ""
-log "MAIL_RECIPIENT: $MAIL_RECIPIENT" +log "TMP_FOLDER..................: $TMP_FOLDER" 
-log "MAIL_STATUS...: $MAIL_STATUS"+log "DIR_BACKUP..................: $DIR_BACKUP" 
 +log "" 
 +log "MAIL_RECIPIENT..............: $MAIL_RECIPIENT" 
 +log "MAIL_STATUS.................: $MAIL_STATUS
 +log "" 
 +log "FILE_USERLIST...............: $FILE_USERLIST" 
 +log "FILE_USERLIST_VALIDATE_EMAIL: $FILE_USERLIST_VALIDATE_EMAIL"
 log "" log ""
  
-# Check if command (file) NOT exist OR IS empty+# Check if compress extension is allowed
-if [ ! -s "$DSYNC_COMMAND" ]; then +if [[ $COMPRESSION != 'zst' && $COMPRESSION != 'gz' ]]; then 
-        log "Check if command '$DSYNC_COMMAND' was found....................[FAILED]+        logline "Check compression extensionfalse 
-        sendmail ERROR +        log "" 
-        movelog +        log "ERROR: Compression extension $COMPRESSION unsupported: choose between gz and zst" 
-        exit 11 +        log "" 
-else +        error 19
-        log "Check if command '$DSYNC_COMMAND' was found....................[  OK  ]"+
 fi fi
  
 # Check if command (file) NOT exist OR IS empty. # Check if command (file) NOT exist OR IS empty.
-if [ ! -s "$TAR_COMMAND" ]; then +checkcommand $DSYNC_COMMAND 
-        log "Check if command '$TAR_COMMAND' was found......................[FAILED]" +checkcommand $TAR_COMMAND 
-        sendmail ERROR +checkcommand $TOUCH_COMMAND 
-        movelog +checkcommand $RM_COMMAND 
-        exit 12 +checkcommand $CAT_COMMAND 
-else +checkcommand $DATE_COMMAND 
-        log "Check if command '$TAR_COMMAND' was found......................[  OK  ]" +checkcommand $MKDIR_COMMAND 
-fi+checkcommand $CHOWN_COMMAND 
 +checkcommand $CHMOD_COMMAND 
 +checkcommand $GREP_COMMAND 
 +checkcommand $MKTEMP_COMMAND 
 +checkcommand $MV_COMMAND 
 +checkcommand $STAT_COMMAND 
 +checkcommand $PROG_SENDMAIL
  
-# Check if command (file) NOT exist OR IS empty. +if [ $COMPRESSION = 'gz' ]; then 
-if [ ! -s "$TOUCH_COMMAND" ]; then +        checkcommand $GZIP_COMMAND
-        log "Check if command '$TOUCH_COMMAND' was found....................[FAILED]" +
-        sendmail ERROR +
-        movelog +
-        exit 13 +
-else +
-        log "Check if command '$TOUCH_COMMAND' was found....................[  OK  ]"+
 fi fi
  
-# Check if command (file) NOT exist OR IS empty. +if [ $COMPRESSION = 'zst' ]; then 
-if [ ! -s "$RM_COMMAND" ]; then +        checkcommand $ZSTD_COMMAND
-        log "Check if command '$RM_COMMAND' was found.......................[FAILED]" +
-        sendmail ERROR +
-        movelog +
-        exit 14 +
-else +
-        log "Check if command '$RM_COMMAND' was found.......................[  OK  ]"+
 fi fi
  
-# Check if command (fileNOT exist OR IS empty+# Check if LOCK file NOT exist. 
-if [ ! -"$CAT_COMMAND" ]; then +if [ ! -"$FILE_LOCK" ]; then 
-        log "Check if command '$CAT_COMMAND' was found......................[FAILED]" +        logline "Check if the script is NOT already runnig true
-        sendmail ERROR +
-        movelog +
-        exit 15 +
-else +
-        log "Check if command '$CAT_COMMAND' was found......................[  OK  ]" +
-fi+
  
-# Check if command (file) NOT exist OR IS empty. +        $TOUCH_COMMAND $FILE_LOCK
-if [ ! -s "$DATE_COMMAND" ]; then +
-        log "Check if command '$DATE_COMMAND' was found.....................[FAILED]" +
-        sendmail ERROR +
-        movelog +
-        exit 16+
 else else
-        log "Check if command '$DATE_COMMAND' was found.....................[  OK  ]"+        logline "Check if the script is NOT already runnig " false 
 +        log "" 
 +        log "ERROR: The script was already running, or LOCK file already exists!" 
 +        log "" 
 + error 20
 fi fi
  
-# Check if command (file) NOT exist OR IS empty+# Check if TMP_FOLDER directory path NOT exists, else create it
-if [ ! -"$MKDIR_COMMAND" ]; then +if [ ! -"$TMP_FOLDER" ]; then 
-        log "Check if command '$MKDIR_COMMAND' was found....................[FAILED]" +        logline "Check if TMP_FOLDER exists " false 
-        sendmail ERROR + $MKDIR_COMMAND -p $TMP_FOLDER 
-        movelog + if "$?" != "0" ]; then 
-        exit 17+ logline "Create temporary '$TMP_FOLDER' folder " false 
 + error 21 
 + else 
 + logline "Create temporary '$TMP_FOLDER' folder " true 
 + fi
 else else
-        log "Check if command '$MKDIR_COMMAND' was found....................[  OK  ]"+        logline "Check if TMP_FOLDER exists true
 fi fi
  
-# Check if command (file) NOT exist OR IS empty+# Check if TMP_FOLDER is owned by $MAILDIR_USER
-if [ ! -s "$CHOWN_COMMAND" ]; then +if [ "$MAILDIR_USER" != `$STAT_COMMAND $STAT_COMMAND_PARAM_FORMAT "$STAT_COMMAND_ARG_FORMAT_USER$TMP_FOLDER` ]; then 
-        log "Check if command '$CHOWN_COMMAND' was found....................[FAILED]" +        logline "Check if TMP_FOLDER owner is $MAILDIR_USER " false 
-        sendmail ERROR + $CHOWN_COMMAND -R $MAILDIR_USER:$MAILDIR_GROUP $TMP_FOLDER 
-        movelog + if "$?" != "0" ]; then 
-        exit 18+        logline "Set ownership of TMP_FOLDER to $MAILDIR_USER:$MAILDIR_GROUP " false 
 + error 22 
 + else 
 +         logline "Set ownership of TMP_FOLDER to $MAILDIR_USER:$MAILDIR_GROUP " true 
 + fi
 else else
-        log "Check if command '$CHOWN_COMMAND' was found....................[  OK  ]"+        logline "Check if TMP_FOLDER owner is $MAILDIR_USER true
 fi fi
  
-# Check if command (file) NOT exist OR IS empty+# Check if TMP_FOLDER group is $MAILDIR_GROUP
-if [ ! -s "$CHMOD_COMMAND" ]; then +if [ "$MAILDIR_GROUP" != `$STAT_COMMAND $STAT_COMMAND_PARAM_FORMAT "$STAT_COMMAND_ARG_FORMAT_GROUP$TMP_FOLDER` ]; then 
-        log "Check if command '$CHMOD_COMMAND' was found....................[FAILED]" +        logline "Check if TMP_FOLDER group is $MAILDIR_GROUP " false 
-        sendmail ERROR + $CHOWN_COMMAND -R $MAILDIR_USER:$MAILDIR_GROUP $TMP_FOLDER 
-        movelog + if "$?" != "0" ]; then 
-        exit 19+        logline "Set ownership of TMP_FOLDER to $MAILDIR_USER:$MAILDIR_GROUP false 
 + error 23 
 + else 
 +         logline "Set ownership of TMP_FOLDER to $MAILDIR_USER:$MAILDIR_GROUP " true 
 + fi
 else else
-        log "Check if command '$CHMOD_COMMAND' was found....................[  OK  ]"+        logline "Check if TMP_FOLDER group is $MAILDIR_GROUP true
 fi fi
  
-# Check if command (file) NOT exist OR IS empty+# Check if DIR_BACKUP directory NOT exists, else create it
-if [ ! -"$GREP_COMMAND" ]; then +if [ ! -"$DIR_BACKUP" ]; then 
-        log "Check if command '$GREP_COMMAND' was found.....................[FAILED]" +        logline "Check if DIR_BACKUP exists " false 
-        sendmail ERROR + $MKDIR_COMMAND -p $DIR_BACKUP 
-        movelog + if "$?" != "0" ]; then 
-        exit 20+ logline "Create backup '$DIR_BACKUP' folder " false 
 + error 24 
 + else 
 + logline "Create backup '$DIR_BACKUP' folder " true 
 + fi
 else else
-        log "Check if command '$GREP_COMMAND' was found.....................[  OK  ]"+        logline "Check if DIR_BACKUP exists true
 fi fi
  
-# Check if command (file) NOT exist OR IS empty+# Check if DIR_BACKUP is owned by $MAILDIR_USER
-if [ ! -s "$PROG_SENDMAIL" ]; then +if [ "$MAILDIR_USER" != `$STAT_COMMAND $STAT_COMMAND_PARAM_FORMAT "$STAT_COMMAND_ARG_FORMAT_USER$DIR_BACKUP` ]; then 
-        log "Check if command '$PROG_SENDMAIL' was found................[FAILED]" +        logline "Check if DIR_BACKUP owner is $MAILDIR_USER " false 
-        sendmail ERROR + $CHOWN_COMMAND -R $MAILDIR_USER:$MAILDIR_GROUP $DIR_BACKUP 
-        movelog + if "$?" != "0" ]; then 
-        exit 21+        logline "Set ownership of DIR_BACKUP to $MAILDIR_USER:$MAILDIR_GROUP false 
 + error 25 
 + else 
 +         logline "Set ownership of DIR_BACKUP to $MAILDIR_USER:$MAILDIR_GROUP " true 
 + fi
 else else
-        log "Check if command '$PROG_SENDMAIL' was found................[  OK  ]"+        logline "Check if DIR_BACKUP owner is $MAILDIR_USER true
 fi fi
  
-# Check if LOCK file NOT exist+# Check if DIR_BACKUP group is $MAILDIR_GROUP
-if [ ! -e "$FILE_LOCK" ]; then +if [ "$MAILDIR_GROUP" != `$STAT_COMMAND $STAT_COMMAND_PARAM_FORMAT "$STAT_COMMAND_ARG_FORMAT_GROUP$DIR_BACKUP` ]; then 
-        log "Check if script is NOT already runnig ..................... OK  ]" +        logline "Check if DIR_BACKUP group is $MAILDIR_GROUP " false 
- + $CHOWN_COMMAND -R $MAILDIR_USER:$MAILDIR_GROUP $DIR_BACKUP 
-        $TOUCH_COMMAND $FILE_LOCK+ if "$?" != "0" ]; then 
 +        logline "Set ownership of DIR_BACKUP to $MAILDIR_USER:$MAILDIR_GROUP " false 
 + error 26 
 + else 
 +        logline "Set ownership of DIR_BACKUP to $MAILDIR_USER:$MAILDIR_GROUP " true 
 + fi
 else else
-        log "Check if script is NOT already runnig .....................[FAILED]" +        logline "Check if DIR_BACKUP group is $MAILDIR_GROUP true
-        log "" +
-        log "ERROR: The script was already running, or LOCK file already exists!" +
-        log "" +
-        sendmail ERROR +
-        movelog +
-        exit 30 +
-fi +
- +
-# Check if DIR_BACKUP Directory NOT exists. +
-if [ ! -d "$DIR_BACKUP" ]; then +
-        log "Check if DIR_BACKUP exists.................................[FAILED]" +
-        $MKDIR_COMMAND -p $DIR_BACKUP +
-        log "DIR_BACKUP was now created.................................[  OK  ]" +
-else +
-        log "Check if DIR_BACKUP exists.................................[  OK  ]"+
 fi fi
  
Zeile 463: Zeile 749:
 log "" log ""
 if [ ! -n "$FILE_USERLIST"  ]; then if [ ! -n "$FILE_USERLIST"  ]; then
-        log "Check if the variable FILE_USERLIST is set.................[  NO  ]"+        log "Check if the variable FILE_USERLIST is set ................[  NO  ]"
         log "Mailboxes to backup will be determined by doveadm user \"*\"."         log "Mailboxes to backup will be determined by doveadm user \"*\"."
  
-        for users in `doveadm user "*"`; do + for users in `doveadm user "*"`; do 
-                VAR_LISTED_USER+=($users); + VAR_LISTED_USER+=($users); 
-        done+ done
 else else
-        log "Check if the variable FILE_USERLIST is set.................[  OK  ]+        logline "Check if the variable FILE_USERLIST is set " true 
-        log "Mailboxes to backup will read from file."+        log "Mailboxes to backup will be read from file."
         log ""         log ""
         log "- File: [$FILE_USERLIST]"         log "- File: [$FILE_USERLIST]"
  
-        # Check if file exists. + # Check if file exists. 
-        if [ -f "$FILE_USERLIST" ]; then + if [ -f "$FILE_USERLIST" ]; then 
-                log "- Check if FILE_USERLIST exists............................[  OK  ]+         logline "- Check if FILE_USERLIST exists " true 
-        else + else 
-                log "- Check if FILE_USERLIST exists............................[FAILED]+         logline "- Check if FILE_USERLIST exists " false 
-                log "" +         log "" 
-                sendmail ERROR + error 30 
-                movelog + fi
-                exit 40 +
-        fi+
  
-        # Check if file is readable. + # Check if file is readable. 
-        if [ -r "$FILE_USERLIST" ]; then + if [ -r "$FILE_USERLIST" ]; then 
-                log "- Check if FILE_USERLIST is readable.......................[  OK  ]+         logline "- Check if FILE_USERLIST is readable " true 
-        else + else 
-                log "- Check if FILE_USERLIST is readable.......................[FAILED]+         logline "- Check if FILE_USERLIST is readable " false 
-                log "" +         log "" 
-                sendmail ERROR + error 31 
-                movelog + fi
-                exit 41 +
-        fi+
  
-        # Read file into variable. + # Read file into variable. 
-        while IFS= read -r line + while IFS= read -r line 
-        do + do  
-                # Check if basic email address syntax is valid. + # Check for valid e-mail address. 
-                if echo "${line}" | $GREP_COMMAND '^[a-zA-Z0-9]*@[a-zA-Z0-9]*\.[a-zA-Z0-9]*$' >/dev/null; then + if [ $FILE_USERLIST_VALIDATE_EMAIL = 'Y' ]; then 
-                        VAR_LISTED_USER+=($line); + # Check if basic email address syntax is valid. 
-                else + if echo "${line}" | $GREP_COMMAND '^[a-zA-Z0-9.-]*@[a-zA-Z0-9.-]*\.[a-zA-Z0-9]*$' >/dev/null; then 
-                        log "" + VAR_LISTED_USER+=($line); 
-                        log "ERROR: The email address: $line is not valid!"+ else 
 +         log "" 
 +         log "ERROR: The user: $line is NOT valid e-mail address!"
  
-                        ((VAR_COUNT_FAIL++)) +                 ((VAR_COUNT_FAIL++)) 
-                        VAR_FAILED_USER+=($line); +                 VAR_FAILED_USER+=($line); 
-                fi + fi 
-        done <"$FILE_USERLIST" + else 
-fi+ VAR_LISTED_USER+=($line); 
 + fi 
 + done <"$FILE_USERLIST"
  
-# Check if VAR_FAILED_USER is greater than zero, if YES add counter to VAR_COUNT_USER. + # 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 + if [ "$VAR_COUNT_FAIL" -ne "0" ]; then 
-        VAR_COUNT_USER=$VAR_COUNT_FAIL+ VAR_COUNT_USER=$VAR_COUNT_FAIL 
 + fi
 fi fi
  
 # Start backup. # Start backup.
 log "" log ""
-log "+-----------------------------------------------------------------+" +headerblock "Run backup $SCRIPT_NAME "
-log "Run backup $SCRIPT_NAME ..................................... |" +
-log "+-----------------------------------------------------------------+"+
 log "" log ""
 +
 +# Make temporary directory DIR_TEMP inside TMP_FOLDER.
 +DIR_TEMP=$($MKTEMP_COMMAND $MKTEMP_COMMAND_PARAM_ARG)
 +if [ "$?" != "0" ]; then
 + logline "Create temporary '$DIR_TEMP' folder " false
 + error 40
 +else
 + logline "Create temporary '$DIR_TEMP' folder " true
 + log ""
 +fi
 +
 +# Set ownership to DIR_TEMP.
 +$CHOWN_COMMAND -R $MAILDIR_USER:$MAILDIR_GROUP $DIR_TEMP
 +if [ "$?" != "0" ]; then
 +        logline "Set ownership of DIR_TEMP to $MAILDIR_USER:$MAILDIR_GROUP " false
 + error 41
 +else
 +        logline "Set ownership of DIR_TEMP to $MAILDIR_USER:$MAILDIR_GROUP " true
 + log ""
 +fi
  
 # Start real backup process for all users. # Start real backup process for all users.
 for users in "${VAR_LISTED_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_TEMP/$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+
  
-        # Check the status of dsync and continue the script depending on the result. +        if [ "$OSTYPE" = "FreeBSD" ]; then 
-        if [ "$?!= "0" ]; then +         $DSYNC_COMMAND -o plugin/quota= backup -u $users $MAILDIR_TYPE:$LOCATION 
-                case "$?" in + else 
-                1)      log "Synchronization failed > user: $users !!!" + $DSYNC_COMMAND -o plugin/quota= -f -u $users backup $MAILDIR_TYPE:$LOCATION 
-                        ;; + fi
-                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 +
-                if [ "$?" -gt "3" ]; then +
-                        log "Synchronization failed > user: $users !!!" +
-                fi+
  
-                ((VAR_COUNT_FAIL++)) + # Check the status of dsync and continue the script depending on the result. 
-                VAR_FAILED_USER+=($users); + if [ "$?" !"0" ]; then 
-        else + case "$?" in 
-                log "Synchronization done for 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 !!!" 
 + ;; 
 + esac 
 + if [ "$?" -gt "3" ]; then 
 + log "Synchronization failed > user: $users !!!" 
 + fi
  
-                cd $DIR_BACKUP+ ((VAR_COUNT_FAIL++)) 
 + VAR_FAILED_USER+=($users); 
 + else 
 +        log "Synchronization done for user: $users ..."
  
-                log "Packaging to archive for user: $users ..." + cd $DIR_TEMP
-                $TAR_COMMAND -cvzf $users-$FILE_BACKUP $USERPART --atime-preserve --preserve-permissions+
  
-                log "Delete archive files for user: $users ..." + log "Packaging to archive for user: $users ..." 
-                (ls -t $users-$FILE_DELETE|head -n $BACKUPFILES_DELETE;ls $users-$FILE_DELETE)|sort|uniq -u|xargs -r rm + if [ "$OSTYPE" = "FreeBSD" ]; then 
-                if [ "$?!= "0" ]; then + $TAR_COMMAND -cvzf $users-$FILE_BACKUP $USERPART 
-                        log "Delete old archive files $DIR_BACKUP .....................[FAILED]" + else 
-                else + $TAR_COMMAND -cvzf $users-$FILE_BACKUP $USERPART --atime-preserve --preserve-permissions 
-                        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 -rf "$DIR_TEMP/$DOMAINPART" 
-                if [ "$?" != "0" ]; then + if [ "$?" != "0" ]; then 
-                        log "Delete mailbox files at: $DIR_BACKUP .....................[FAILED]+         logline "Delete mailbox files at: $DIR_TEMP false 
-                else + else 
-                        log "Delete mailbox files at: $DIR_BACKUP .....................[  OK  ]+         logline "Delete mailbox files at: $DIR_TEMP true 
-                fi + fi
-        fi+
  
-        log "Ended backup process for user: $users ..."+ log "Copying archive file for user: $users ..." 
 + $MV_COMMAND "$DIR_TEMP/$users-$FILE_BACKUP" "$DIR_BACKUP" 
 + if [ "$?" != "0" ]; then 
 +        logline "Move archive file for user to: $DIR_BACKUP " false 
 + else 
 +        logline "Move archive file for user to: $DIR_BACKUP " true 
 + fi 
 + 
 + cd $DIR_BACKUP 
 + 
 + log "Delete archive files for user: $users ..." 
 + (ls -t $users-$FILE_DELETE|head -n $BACKUPFILES_DELETE;ls $users-$FILE_DELETE)|sort|uniq -u|xargs -r rm 
 + if [ "$?" != "0" ]; then 
 +        logline "Delete old archive files from: $DIR_BACKUP " false 
 + else 
 +        logline "Delete old archive files from: $DIR_BACKUP " true 
 + fi 
 + fi 
 + 
 + log "Ended backup process for user: $users ..."
         log ""         log ""
 done done
  
-# Set owner and rights permissions to backup directory and backup files.+# Delete the temporary folder DIR_TEMP. 
 +$RM_COMMAND -rf $DIR_TEMP 
 +if [ "$?" != "0" ]; then 
 + logline "Delete temporary '$DIR_TEMP' folder " false 
 + error 42 
 +else 
 + logline "Delete temporary '$DIR_TEMP' folder " true 
 + log "" 
 +fi 
 + 
 +# Set ownership to backup directory, again.
 $CHOWN_COMMAND -R $MAILDIR_USER:$MAILDIR_GROUP $DIR_BACKUP $CHOWN_COMMAND -R $MAILDIR_USER:$MAILDIR_GROUP $DIR_BACKUP
 +if [ "$?" != "0" ]; then
 +        logline "Set ownership of DIR_BACKUP to $MAILDIR_USER:$MAILDIR_GROUP " false
 + error 43
 +else
 +        logline "Set ownership of DIR_BACKUP to $MAILDIR_USER:$MAILDIR_GROUP " true
 +fi
 +
 +# Set rights permission to backup directory.
 $CHMOD_COMMAND 700 $DIR_BACKUP $CHMOD_COMMAND 700 $DIR_BACKUP
 +if [ "$?" != "0" ]; then
 +        logline "Set permission of DIR_BACKUP to drwx------ " false
 + error 44
 +else
 +        logline "Set permission of DIR_BACKUP to drwx------ " true
 +fi
 +
 +# Set rights permissions to backup files.
 $CHMOD_COMMAND -R 600 $DIR_BACKUP/* $CHMOD_COMMAND -R 600 $DIR_BACKUP/*
 +if [ "$?" != "0" ]; then
 +        logline "Set file permissions in DIR_BACKUP to -rw------- " false
 + error 45
 +else
 +        logline "Set file permissions in DIR_BACKUP to -rw------- " true
 + log ""
 +fi
  
 # Delete LOCK file. # Delete LOCK file.
Zeile 591: Zeile 948:
         log ""         log ""
         $RM_COMMAND -f $FILE_LOCK         $RM_COMMAND -f $FILE_LOCK
-        sendmail ERROR + error 99
-        movelog +
-        exit 99+
 else else
-        log "+-----------------------------------------------------------------+" + headerblock "End backup $SCRIPT_NAME "
-        log "End backup $SCRIPT_NAME ..................................... |" +
-        log "+-----------------------------------------------------------------+"+
         log ""         log ""
 fi fi
  
 # Finish syncing with runntime statistics. # Finish syncing with runntime statistics.
-log "+-----------------------------------------------------------------+" +headerblock "Runtime statistics "
-log "Runtime statistics............................................. |" +
-log "+-----------------------------------------------------------------+"+
 log "" log ""
 log "- Number of determined users: $VAR_COUNT_USER" log "- Number of determined users: $VAR_COUNT_USER"
Zeile 610: Zeile 961:
  
 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 "" log ""
 END_TIMESTAMP=`$DATE_COMMAND '+%s'` END_TIMESTAMP=`$DATE_COMMAND '+%s'`
-log "Runtime: `$DATE_COMMAND -u -d "0 $END_TIMESTAMP seconds - $RUN_TIMESTAMP seconds" +'%H:%M:%S'` time elapsed."+if [ "$OSTYPE" = "FreeBSD" ]; then 
 +        DELTA=$((END_TIMESTAMP-RUN_TIMESTAMP)) 
 +        log "$(printf 'Runtime: %02d:%02d:%02d time elapsed.\n' $((DELTA/3600)) $((DELTA%3600/60)) $((DELTA%60)))" 
 +else 
 + log "Runtime: `$DATE_COMMAND -u -d "0 $END_TIMESTAMP seconds - $RUN_TIMESTAMP seconds" +'%H:%M:%S'` time elapsed." 
 +fi
 log "" log ""
-log "+-----------------------------------------------------------------+" +headerblock "Finished creating the backups [`$DATE_COMMAND '+%a, %d %b %Y %H:%M:%S (%z)'`]"
-log "Finished creating the backups [`$DATE_COMMAND '+%a, %d %b %Y %H:%M:%S (%Z)'`] |" +
-log "+-----------------------------------------------------------------+"+
 log "" log ""
  
Zeile 629: Zeile 983:
 if [ "$VAR_COUNT_FAIL" -gt "0" ]; then if [ "$VAR_COUNT_FAIL" -gt "0" ]; then
         sendmail ERROR         sendmail ERROR
-        movelog + # Move the log to the permanent log file. 
-        exit 1+ movelog 
 + 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 + # Move the log to the permanent log file. 
-        exit 0+ movelog 
 + exit 0
 fi fi
 </code> </code>
Zeile 657: Zeile 1013:
 klaus@tachtler.net klaus@tachtler.net
 petra@tachtler.net petra@tachtler.net
 +</code>
 +**__oder__**
 +
 +<code>
 +klaus
 +petra
 </code> </code>
  
Zeile 666: Zeile 1028:
 **__OHNE__ ''FILE_USERLIST'':** **__OHNE__ ''FILE_USERLIST'':**
 <code> <code>
-2019/01/30 14:24:28  INFO: +-----------------------------------------------------------------+ +/root/Install/scripts/dovecot_backup.sh 
-2019/01/30 14:24:28  INFO: | Start backup of the mailboxes [Wed30 Jan 2019 14:24:28 (CET)] | + 
-2019/01/30 14:24:28  INFO: +-----------------------------------------------------------------+ ++-------------------------------------------------------------------+ 
-2019/01/30 14:24:28  INFO: +| Start backup of the mailboxes [Sat02 Oct 2021 08:18:37 (+0200)] | 
-2019/01/30 14:24:28  INFO: Run script with following parameter++-------------------------------------------------------------------+ 
-2019/01/30 14:24:28  INFO+ 
-2019/01/30 14:24:28  INFO: SCRIPT_NAME...: dovecot_backup +SCRIPT_NAME.................dovecot_backup 
-2019/01/30 14:24:28  INFO: + 
-2019/01/30 14:24:28  INFO: DIR_BACKUP....: /srv/backup +OS_TYPE.....................linux-gnu 
-2019/01/30 14:24:28  INFO: + 
-2019/01/30 14:24:28  INFO: MAIL_RECIPIENT: you@example.com +COMPRESSION.................gz 
-2019/01/30 14:24:28  INFO: MAIL_STATUS...:+ 
-2019/01/30 14:24:28  INFO+TMP_FOLDER..................: /srv/backup 
-2019/01/30 14:24:28  INFO: Check if command '/bin/dsync' was found....................[ OK ] +DIR_BACKUP..................: /srv/backup 
-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 ] +MAIL_RECIPIENT..............: you@example.com 
-2019/01/30 14:24:28  INFO: Check if command '/bin/rm' was found.......................[ OK ] +MAIL_STATUS.................: N 
-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 ] +FILE_USERLIST...............
-2019/01/30 14:24:28  INFO: Check if command '/bin/mkdir' was found....................[ OK ] +FILE_USERLIST_VALIDATE_EMAIL
-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 ] +Check if command 'dsync'|'/bin/dsync' was found ...........[ OK ] 
-2019/01/30 14:24:28  INFO: Check if command '/bin/grep' was found.....................[ OK ] +Check if command 'tar'|'/bin/tar' was found ...............[ OK ] 
-2019/01/30 14:24:28  INFO: Check if command '/sbin/sendmail' was found................[ OK ] +Check if command 'touch'|'/bin/touch' was found ...........[ OK ] 
-2019/01/30 14:24:28  INFO: Check if script is NOT already runnig .....................[ OK ] +Check if command 'rm'|'/bin/rm' was found .................[ OK ] 
-2019/01/30 14:24:28  INFO: Check if DIR_BACKUP exists.................................[ OK ] +Check if command 'cat'|'/bin/cat' was found ...............[ OK ] 
-2019/01/30 14:24:28  INFO: +Check if command 'date'|'/bin/date' was found .............[ OK ] 
-2019/01/30 14:24:28  INFO: Check if the variable FILE_USERLIST is set.................[ NO ] +Check if command 'mkdir'|'/bin/mkdir' was found ...........[ OK ] 
-2019/01/30 14:24:28  INFO: Mailboxes to backup will be determined by doveadm user "*"+Check if command 'chown'|'/bin/chown' was found ...........[ OK ] 
-2019/01/30 14:24:28  INFO: +Check if command 'chmod'|'/bin/chmod' was found ...........[ OK ] 
-2019/01/30 14:24:28  INFO: +Check if command 'grep'|'/bin/grep' was found .............[ OK ] 
-2019/01/30 14:24:28  INFO: +-----------------------------------------------------------------+ +Check if command 'mktemp'|'/bin/mktemp' was found .........[ OK ] 
-2019/01/30 14:24:28  INFO: | Run backup dovecot_backup ..................................... | +Check if command 'mv'|'/bin/mv' was found .................[ OK ] 
-2019/01/30 14:24:28  INFO: +-----------------------------------------------------------------+ +Check if command 'stat'|'/bin/stat' was found .............[ OK ] 
-2019/01/30 14:24:28  INFO: +Check if command 'sendmail'|'/sbin/sendmail' was found ....[ OK ] 
-2019/01/30 14:24:29  INFO: Start backup process for user: klaus@tachtler.net ... +Check if command 'gzip'|'/bin/gzip' was found .............[ OK ] 
-2019/01/30 14:24:29  INFO: Extract mailbox data for user: klaus@tachtler.net ... +Check if the script is NOT already runnig .................[ OK ] 
-2019/01/30 14:27:43  INFO: Synchronization done for user: klaus@tachtler.net ... +Check if TMP_FOLDER exists ................................[ OK ] 
-2019/01/30 14:27:43  INFO: Packaging to archive for user: klaus@tachtler.net ... +Check if TMP_FOLDER owner is vmail ........................[ OK ] 
-2019/01/30 14:27:48  INFO: Delete archive files for user: klaus@tachtler.net ... +Check if TMP_FOLDER group is vmail ........................[ OK ] 
-2019/01/30 14:27:48  INFO: Delete old archive files /srv/backup .....................[ OK ] +Check if DIR_BACKUP exists ................................[ OK ] 
-2019/01/30 14:27:48  INFO: Delete mailbox files for user: klaus@tachtler.net ... +Check if DIR_BACKUP owner is vmail ........................[ OK ] 
-2019/01/30 14:27:48  INFO: Delete mailbox files at: /srv/backup .....................[ OK ] +Check if DIR_BACKUP group is vmail ........................[ OK ] 
-2019/01/30 14:27:48  INFO: Ended backup process for user: klaus@tachtler.net ... + 
-2019/01/30 14:27:48  INFO: +Check if the variable FILE_USERLIST is set ................[ NO ] 
-2019/01/30 14:27:48  INFO: Start backup process for user: petra@tachtler.net ... +Mailboxes to backup will be determined by doveadm user "*"
-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 ... +| Run backup dovecot_backup ..................................... | 
-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 ... +Create temporary '/srv/backup/dovecot_backup-0UCtpQfhdsiH' folder [ OK ] 
-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 ... +Set ownership of DIR_TEMP to vmail:vmail ..................[ OK ] 
-2019/01/30 14:28:01  INFO: + 
-2019/01/30 14:28:01  INFO: +-----------------------------------------------------------------+ +Start backup process for user: ... 
-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............................................. | +Set ownership of DIR_BACKUP to vmail:vmail ................[ OK ] 
-2019/01/30 14:28:01  INFO: +-----------------------------------------------------------------+ +Set permission of DIR_BACKUP to drwx------ ................[ OK ] 
-2019/01/30 14:28:01  INFO: +Set file permissions in DIR_BACKUP to -rw------- ..........[ OK ] 
-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: +| End backup dovecot_backup ..................................... | 
-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 [Wed30 Jan 2019 14:28:01 (CET)] | +| Runtime statistics ............................................ | 
-2019/01/30 14:28:01  INFO: +-----------------------------------------------------------------+ ++-----------------------------------------------------------------+ 
-2019/01/30 14:28:01  INFO:+ 
 +- Number of determined users: 4 
 +- ...Summary of failed users: 0 
 + 
 +Runtime: 00:01:54 time elapsed. 
 + 
 ++-------------------------------------------------------------------+ 
 +| Finished creating the backups [Sat02 Oct 2021 08:20:31 (+0200)] | 
 ++-------------------------------------------------------------------+ 
 </code> </code>
  
 **__MIT__ ''FILE_USERLIST'':** **__MIT__ ''FILE_USERLIST'':**
 <code> <code>
-2019/01/30 15:07:51  INFO: +-----------------------------------------------------------------+ +/root/Install/scripts/dovecot_backup.sh 
-2019/01/30 15:07:51  INFO: | Start backup of the mailboxes [Wed30 Jan 2019 15:07:51 (CET)] | + 
-2019/01/30 15:07:51  INFO: +-----------------------------------------------------------------+ ++-------------------------------------------------------------------+ 
-2019/01/30 15:07:51  INFO: +| Start backup of the mailboxes [Sat02 Oct 2021 08:06:04 (+0200)] | 
-2019/01/30 15:07:51  INFO: Run script with following parameter++-------------------------------------------------------------------+ 
-2019/01/30 15:07:51  INFO: + 
-2019/01/30 15:07:51  INFO: SCRIPT_NAME...: dovecot_backup +SCRIPT_NAME.................dovecot_backup 
-2019/01/30 15:07:51  INFO+ 
-2019/01/30 15:07:51  INFO: DIR_BACKUP....: /srv/backup +OS_TYPE.....................: linux-gnu 
-2019/01/30 15:07:51  INFO: + 
-2019/01/30 15:07:51  INFO: MAIL_RECIPIENT: you@example.com +COMPRESSION.................gz 
-2019/01/30 15:07:51  INFO: MAIL_STATUS...:+ 
-2019/01/30 15:07:51  INFO: +TMP_FOLDER..................: /srv/backup 
-2019/01/30 15:07:51  INFO: Check if command '/bin/dsync' was found....................[ OK ] +DIR_BACKUP..................: /srv/backup 
-2019/01/30 15:07:51  INFO: Check if command '/bin/tar' was found......................[ OK ] + 
-2019/01/30 15:07:51  INFO: Check if command '/bin/touch' was found....................[ OK ] +MAIL_RECIPIENT..............: you@example.com 
-2019/01/30 15:07:51  INFO: Check if command '/bin/rm' was found.......................[ OK ] +MAIL_STATUS.................: N 
-2019/01/30 15:07:51  INFO: Check if command '/bin/cat' was found......................[ OK ] + 
-2019/01/30 15:07:51  INFO: Check if command '/bin/date' was found.....................[ OK ] +FILE_USERLIST...............: /srv/dovecot_backup.userlist 
-2019/01/30 15:07:51  INFO: Check if command '/bin/mkdir' was found....................[ OK ] +FILE_USERLIST_VALIDATE_EMAIL
-2019/01/30 15:07:51  INFO: Check if command '/bin/chown' was found....................[ OK ] + 
-2019/01/30 15:07:51  INFO: Check if command '/bin/chmod' was found....................[ OK ] +Check if command 'dsync'|'/bin/dsync' was found ...........[ OK ] 
-2019/01/30 15:07:51  INFO: Check if command '/bin/grep' was found.....................[ OK ] +Check if command 'tar'|'/bin/tar' was found ...............[ OK ] 
-2019/01/30 15:07:51  INFO: Check if command '/sbin/sendmail' was found................[ OK ] +Check if command 'touch'|'/bin/touch' was found ...........[ OK ] 
-2019/01/30 15:07:51  INFO: Check if script is NOT already runnig .....................[ OK ] +Check if command 'rm'|'/bin/rm' was found .................[ OK ] 
-2019/01/30 15:07:51  INFO: Check if DIR_BACKUP exists.................................[ OK ] +Check if command 'cat'|'/bin/cat' was found ...............[ OK ] 
-2019/01/30 15:07:51  INFO: +Check if command 'date'|'/bin/date' was found .............[ OK ] 
-2019/01/30 15:07:51  INFO: Check if the variable FILE_USERLIST is set.................[ OK ] +Check if command 'mkdir'|'/bin/mkdir' was found ...........[ OK ] 
-2019/01/30 15:07:51  INFO: Mailboxes to backup will read from file. +Check if command 'chown'|'/bin/chown' was found ...........[ OK ] 
-2019/01/30 15:07:51  INFO: +Check if command 'chmod'|'/bin/chmod' was found ...........[ OK ] 
-2019/01/30 15:07:51  INFO: - File: [/home/klaus/dovecot_backup.userlist] +Check if command 'grep'|'/bin/grep' was found .............[ OK ] 
-2019/01/30 15:07:51  INFO: - Check if FILE_USERLIST exists............................[ OK ] +Check if command 'mktemp'|'/bin/mktemp' was found .........[ OK ] 
-2019/01/30 15:07:51  INFO: - Check if FILE_USERLIST is readable.......................[ OK ] +Check if command 'mv'|'/bin/mv' was found .................[ OK ] 
-2019/01/30 15:07:51  INFO: +Check if command 'stat'|'/bin/stat' was found .............[ OK ] 
-2019/01/30 15:07:51  INFO: ERROR: The email address: notvaild_email.net is not valid! +Check if command 'sendmail'|'/sbin/sendmail' was found ....[ OK ] 
-2019/01/30 15:07:51  INFO: +Check if command 'gzip'|'/bin/gzip' was found .............[ OK ] 
-2019/01/30 15:07:51  INFO: +-----------------------------------------------------------------+ +Check if the script is NOT already runnig .................[ OK ] 
-2019/01/30 15:07:51  INFO: | Run backup dovecot_backup ..................................... | +Check if TMP_FOLDER exists ................................[ OK ] 
-2019/01/30 15:07:51  INFO: +-----------------------------------------------------------------+ +Check if TMP_FOLDER owner is vmail ........................[ OK ] 
-2019/01/30 15:07:51  INFO+Check if TMP_FOLDER group is vmail ........................[ OK ] 
-2019/01/30 15:07:51  INFO: Start backup process for user: klaus@tachtler.net ... +Check if DIR_BACKUP exists ................................[ OK ] 
-2019/01/30 15:07:51  INFO: Extract mailbox data for user: klaus@tachtler.net ... +Check if DIR_BACKUP owner is vmail ........................[ OK ] 
-2019/01/30 15:07:54  INFO: Synchronization done for user: klaus@tachtler.net ... +Check if DIR_BACKUP group is vmail ........................[ OK ] 
-2019/01/30 15:07:54  INFO: Packaging to archive for user: klaus@tachtler.net ... + 
-2019/01/30 15:07:54  INFO: Delete archive files for user: klaus@tachtler.net ... +Check if the variable FILE_USERLIST is set ................[ OK ] 
-2019/01/30 15:07:54  INFO: Delete old archive files /srv/backup .....................[ OK ] +Mailboxes to backup will be read from file. 
-2019/01/30 15:07:54  INFO: Delete mailbox files for user: klaus@tachtler.net ... + 
-2019/01/30 15:07:54  INFO: Delete mailbox files at: /srv/backup .....................[ OK ] +- File: [/srv/dovecot_backup.userlist] 
-2019/01/30 15:07:54  INFO: Ended backup process for user: klaus@tachtler.net ... +- Check if FILE_USERLIST exists ...........................[ OK ] 
-2019/01/30 15:07:54  INFO: +- Check if FILE_USERLIST is readable ......................[ OK ] 
-2019/01/30 15:07:54  INFO: Start backup process for user: petra@tachtler.net ... + 
-2019/01/30 15:07:54  INFO: Extract mailbox data for user: petra@tachtler.net ... ++-----------------------------------------------------------------+ 
-2019/01/30 15:07:56  INFO: Synchronization done for user: petra@tachtler.net ... +| Run backup dovecot_backup ..................................... | 
-2019/01/30 15:07:56  INFO: Packaging to archive for user: petra@tachtler.net ... ++-----------------------------------------------------------------+ 
-2019/01/30 15:07:56  INFO: Delete archive files for user: petra@tachtler.net ... + 
-2019/01/30 15:07:56  INFO: Delete old archive files /srv/backup .....................[ OK ] +Create temporary '/srv/backup/dovecot_backup-OnUxredsCgti' folder [ OK ] 
-2019/01/30 15:07:56  INFO: Delete mailbox files for user: petra@tachtler.net ... + 
-2019/01/30 15:07:56  INFO: Delete mailbox files at: /srv/backup .....................[ OK ] +Set ownership of DIR_TEMP to vmail:vmail ..................[ OK ] 
-2019/01/30 15:07:56  INFO: Ended backup process for user: petra@tachtler.net ... + 
-2019/01/30 15:07:56  INFO: +Start backup process for user: klaus@tachtler.net ... 
-2019/01/30 15:07:56  INFO: +-----------------------------------------------------------------+ +Extract mailbox data for user: klaus@tachtler.net ... 
-2019/01/30 15:07:56  INFO: | End backup dovecot_backup ..................................... | +... 
-2019/01/30 15:07:56  INFO: +-----------------------------------------------------------------+ +... 
-2019/01/30 15:07:56  INFO: +Synchronization done for user: klaus@tachtler.net ... 
-2019/01/30 15:07:56  INFO: +-----------------------------------------------------------------+ +Packaging to archive for user: klaus@tachtler.net ... 
-2019/01/30 15:07:56  INFO: | Runtime statistics............................................. | +... 
-2019/01/30 15:07:56  INFO: +-----------------------------------------------------------------+ +... 
-2019/01/30 15:07:56  INFO: +Delete mailbox files for user: klaus@tachtler.net ... 
-2019/01/30 15:07:56  INFO: - Number of determined users: 2 +Delete mailbox files at: /srv/backup/dovecot_backup-OnUxredsCgti [ OK ] 
-2019/01/30 15:07:56  INFO: - ...Summary of failed users: 1 +Copying archive file for user: klaus@tachtler.net ... 
-2019/01/30 15:07:56  INFO: - ...Mailbox of failed users: +Move archive file for user to: /srv/backup ................[ OK ] 
-2019/01/30 15:07:56  INFO: - ... notvaild_email.net +Delete archive files for user: klaus@tachtler.net ... 
-2019/01/30 15:07:56  INFO: +Delete old archive files from: /srv/backup ................[ OK ] 
-2019/01/30 15:07:56  INFO: Runtime: 00:00:05 time elapsed. +Ended backup process for user: klaus@tachtler.net ... 
-2019/01/30 15:07:56  INFO: + 
-2019/01/30 15:07:56  INFO: +-----------------------------------------------------------------+ +Start backup process for user: petra@tachtler.net ... 
-2019/01/30 15:07:56  INFO: | Finished creating the backups [Wed30 Jan 2019 15:07:56 (CET)] | +Extract mailbox data for user: petra@tachtler.net ... 
-2019/01/30 15:07:56  INFO: +-----------------------------------------------------------------+ +... 
-2019/01/30 15:07:56  INFO:+... 
 +Synchronization done for user: petra@tachtler.net ... 
 +Packaging to archive for user: petra@tachtler.net ... 
 +... 
 +... 
 +Delete mailbox files for user: petra@tachtler.net ... 
 +Delete mailbox files at: /srv/backup/dovecot_backup-OnUxredsCgti [ OK ] 
 +Copying archive file for user: petra@tachtler.net ... 
 +Move archive file for user to: /srv/backup ................[ OK ] 
 +Delete archive files for user: petra@tachtler.net ... 
 +Delete old archive files from: /srv/backup ................[ OK ] 
 +Ended backup process for user: petra@tachtler.net ... 
 + 
 +Delete temporary '/srv/backup/dovecot_backup-OnUxredsCgti' folder [ OK ] 
 + 
 +Set ownership of DIR_BACKUP to vmail:vmail ................[ OK ] 
 +Set permission of DIR_BACKUP to drwx------ ................[ OK ] 
 +Set file permissions in DIR_BACKUP to -rw------- ..........[ OK ] 
 + 
 ++-----------------------------------------------------------------+ 
 +| End backup dovecot_backup ..................................... | 
 ++-----------------------------------------------------------------+ 
 + 
 ++-----------------------------------------------------------------+ 
 +| Runtime statistics ............................................ | 
 ++-----------------------------------------------------------------+ 
 + 
 +- Number of determined users: 2 
 +- ...Summary of failed users: 0 
 + 
 +Runtime: 00:01:46 time elapsed. 
 + 
 ++-------------------------------------------------------------------+ 
 +| Finished creating the backups [Sat02 Oct 2021 08:07:50 (+0200)] | 
 ++-------------------------------------------------------------------+ 
 </code> </code>
  
Zeile 919: Zeile 1325:
   - Das Backup befindet sich unter **''/srv/backup''**   - Das Backup befindet sich unter **''/srv/backup''**
   - Der Benutzer lautet **''klaus@tachtler.net''**   - Der Benutzer lautet **''klaus@tachtler.net''**
 +***.tar.gz-Komprimierungsmethode**
 +<code>
 +# tar -avzf /srv/backup/klaus@tachtler.net-dovecot_backup_20140429_151044.tar.gz -C /tmp/recovery --atime-preserve --preserve-permissions
 +</code>
 +***.tar.zst-Komprimierungsmethode**
 +<code>
 +# tar -avzf /srv/backup/klaus@tachtler.net-dovecot_backup_20140429_151044.tar.zst -C /tmp/recovery --atime-preserve --preserve-permissions
 +</code>
 +
 +:!: **HINWEIS** - Der Paramter **''-a''** beim Befehl **''tar''** hat nachfolgende Bedeutung:
 <code> <code>
-# tar -xvzf /srv/backup/klaus@tachtler.net-dovecot_backup_20140429_151044.tar.gz -C /tmp/recovery --atime-preserve --preserve-permissions+-a, --auto-compress 
 +              use archive suffix to determine the compression program
 </code> </code>
  
tachtler/dovecot_backup_-_skript.1548859952.txt.gz · Zuletzt geändert: 2019/01/30 15:52 von klaus