tachtler:dovecot_backup_-_skript
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende ÜberarbeitungNächste ÜberarbeitungBeide Seiten der Revision | ||
tachtler:dovecot_backup_-_skript [2019/01/30 15:31] – [Skript] klaus | tachtler:dovecot_backup_-_skript [2023/07/03 19:07] – [Skript] klaus | ||
---|---|---|---|
Zeile 22: | Zeile 22: | ||
Password: | Password: | ||
</ | </ | ||
+ | |||
+ | ===== Zstandard (zstd) ===== | ||
+ | |||
+ | Für den Einsatz der Komprimierungsmethode [[https:// | ||
+ | |||
+ | **__CentOS 7__** | ||
+ | |||
+ | Zur Installation von [[https:// | ||
+ | |||
+ | Nachfolgend soll das Repository des Drittanbieters [[https:// | ||
+ | * [[tachtler: | ||
+ | |||
+ | Zur Installation der Komprimierungsmethode [[https:// | ||
+ | * **'' | ||
+ | |||
+ | Mit nachfolgendem Befehl, werden die benötigten Pakete installiert: | ||
+ | < | ||
+ | # 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: | ||
+ | --> Finished Dependency Resolution | ||
+ | |||
+ | Changes in packages about to be updated: | ||
+ | |||
+ | |||
+ | Dependencies Resolved | ||
+ | |||
+ | ================================================================================ | ||
+ | | ||
+ | ================================================================================ | ||
+ | Installing: | ||
+ | | ||
+ | |||
+ | Transaction Summary | ||
+ | ================================================================================ | ||
+ | Install | ||
+ | |||
+ | 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 | ||
+ | Running transaction check | ||
+ | Running transaction test | ||
+ | Transaction test succeeded | ||
+ | Running transaction | ||
+ | Installing : zstd-1.5.0-1.el7.x86_64 | ||
+ | Verifying | ||
+ | |||
+ | Installed: | ||
+ | zstd.x86_64 0: | ||
+ | |||
+ | Complete! | ||
+ | </ | ||
+ | |||
+ | Mit nachfolgendem Befehl kann überprüft werden, welcher Inhalt mit dem Paket installiert wurde. | ||
+ | |||
+ | Paket **zstd**: | ||
+ | < | ||
+ | # rpm -qil zstd | ||
+ | Name : zstd | ||
+ | Version | ||
+ | Release | ||
+ | Architecture: | ||
+ | Install Date: Sat 02 Oct 2021 07:40:55 AM CEST | ||
+ | Group : Unspecified | ||
+ | Size : 2178120 | ||
+ | License | ||
+ | Signature | ||
+ | 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 | ||
+ | Vendor | ||
+ | URL : https:// | ||
+ | Bug URL : https:// | ||
+ | Summary | ||
+ | Description : | ||
+ | Zstd, short for Zstandard, is a fast lossless compression algorithm, | ||
+ | targeting real-time compression scenarios at zlib-level compression ratio. | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | </ | ||
+ | |||
+ | |||
===== 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__**, | * **__oder__** über **__eine Datei mit E-Mail-Adressen__**, | ||
- | * 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=' | SCRIPT_NAME=' | ||
+ | |||
+ | # CUSTOM - Backup-Files compression method - (possible values: gz zst). | ||
+ | COMPRESSION=' | ||
# CUSTOM - Backup-Files. | # CUSTOM - Backup-Files. | ||
+ | TMP_FOLDER='/ | ||
DIR_BACKUP='/ | DIR_BACKUP='/ | ||
- | FILE_BACKUP=dovecot_backup_`date ' | + | FILE_BACKUP=dovecot_backup_`date ' |
- | FILE_DELETE=' | + | FILE_DELETE=$(printf |
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='/ | + | # FILE_USERLIST='/ |
# - 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=' | ||
# CUSTOM - Mail-Recipient. | # CUSTOM - Mail-Recipient. | ||
- | MAIL_RECIPIENT=' | + | MAIL_RECIPIENT=' |
# CUSTOM - Status-Mail [Y|N]. | # CUSTOM - Status-Mail [Y|N]. | ||
Zeile 78: | Zeile 192: | ||
^ Parametername | ^ Parametername | ||
| '' | | '' | ||
- | | '' | + | | '' |
+ | | '' | ||
+ | | '' | ||
| '' | | '' | ||
| '' | | '' | ||
Zeile 86: | Zeile 202: | ||
| '' | | '' | ||
| '' | | '' | ||
- | | '' | + | | '' |
+ | | '' | ||
| '' | | '' | ||
| '' | | '' | ||
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 | + | # Version |
# # | # # | ||
# Author | # Author | ||
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 | + | # | the Free Software Foundation; either version |
# | (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. | ||
# | # | ||
+ | # -------------------------------------------------------------------------- # | ||
+ | # Version | ||
+ | # Description : Add a switch to enable or disable e-mail address check, when # | ||
+ | # | ||
+ | # | ||
+ | # -------------------------------------------------------------------------- # | ||
+ | # Version | ||
+ | # Description : Code redesign. | ||
+ | # -------------------------------------------------------------------------- # | ||
+ | # Version | ||
+ | # Description : GitHub Issue #12 # | ||
+ | # | ||
+ | # | ||
+ | # the mailboxes was introduced. This allows the use of a # | ||
+ | # | ||
+ | # on a faster storage medium, or also on a local storage | ||
+ | # | ||
+ | # an NFS mounted storage. | ||
+ | # | ||
+ | # -------------------------------------------------------------------------- # | ||
+ | # Version | ||
+ | # Description : GitHub: Issue #13 # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # -------------------------------------------------------------------------- # | ||
+ | # Version | ||
+ | # Description : GitHub: Issue #16 # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # -------------------------------------------------------------------------- # | ||
+ | # Version | ||
+ | # Description : GitHub: Issue #18 # | ||
+ | # Add dash ' | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # -------------------------------------------------------------------------- # | ||
+ | # Version | ||
+ | # Description : GitHub: Issue #21 # | ||
+ | # Set the required ownership on TMP_FOLDER before running the # | ||
+ | # | ||
+ | # | ||
+ | # -------------------------------------------------------------------------- # | ||
+ | # Version | ||
+ | # Description : Optimize ownership settings for TMP_FOLDER and DIR_BACKUP. | ||
+ | # -------------------------------------------------------------------------- # | ||
+ | # Version | ||
+ | # Description : GitHub: Issue #22. # | ||
+ | # | ||
+ | # be sent due to an error, or a status email has been # | ||
+ | # | ||
+ | # | ||
+ | # -------------------------------------------------------------------------- # | ||
+ | # Version | ||
+ | # 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. | ||
+ | # | ||
+ | # -------------------------------------------------------------------------- # | ||
+ | # Version | ||
+ | # Description : GitHub: Issue #24 # | ||
+ | # | ||
+ | # | ||
+ | # -------------------------------------------------------------------------- # | ||
+ | # Version | ||
+ | # Description : GitHub: Pull request #26 # | ||
+ | # | ||
+ | # | ||
# -------------------------------------------------------------------------- # | # -------------------------------------------------------------------------- # | ||
# Version | # Version | ||
Zeile 206: | Zeile 397: | ||
# CUSTOM - Script-Name. | # CUSTOM - Script-Name. | ||
SCRIPT_NAME=' | SCRIPT_NAME=' | ||
+ | |||
+ | # CUSTOM - Backup-Files compression method - (possible values: gz zst). | ||
+ | COMPRESSION=' | ||
# CUSTOM - Backup-Files. | # CUSTOM - Backup-Files. | ||
+ | TMP_FOLDER='/ | ||
DIR_BACKUP='/ | DIR_BACKUP='/ | ||
- | FILE_BACKUP=dovecot_backup_`date ' | + | FILE_BACKUP=dovecot_backup_`date ' |
- | FILE_DELETE=' | + | FILE_DELETE=$(printf |
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='/ | + | # FILE_USERLIST='/ |
# - 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=' | ||
# 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='/ | FILE_LOCK='/ | ||
FILE_LOG='/ | FILE_LOG='/ | ||
Zeile 255: | Zeile 458: | ||
VAR_HOSTNAME=`uname -n` | VAR_HOSTNAME=`uname -n` | ||
VAR_SENDER=' | VAR_SENDER=' | ||
- | 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 [ " | ||
+ | DSYNC_COMMAND=`command -v doveadm` | ||
+ | STAT_COMMAND_PARAM_FORMAT=' | ||
+ | STAT_COMMAND_ARG_FORMAT_USER=' | ||
+ | STAT_COMMAND_ARG_FORMAT_GROUP=' | ||
+ | MKTEMP_COMMAND_PARAM_ARG=" | ||
+ | else | ||
+ | DSYNC_COMMAND=`command -v dsync` | ||
+ | STAT_COMMAND_PARAM_FORMAT=' | ||
+ | STAT_COMMAND_ARG_FORMAT_USER=' | ||
+ | STAT_COMMAND_ARG_FORMAT_GROUP=' | ||
+ | MKTEMP_COMMAND_PARAM_ARG=" | ||
+ | fi | ||
# Functions. | # Functions. | ||
Zeile 278: | Zeile 496: | ||
function movelog() { | function movelog() { | ||
- | | + | $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=" | ||
+ | |||
+ | sendmail ERROR | ||
+ | movelog | ||
+ | exit $CODE_ERROR | ||
+ | } | ||
+ | |||
+ | function headerblock () { | ||
+ | # Parameters. | ||
+ | TEXT_INPUT=" | ||
+ | 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=" | ||
+ | fi | ||
+ | |||
+ | printf -v char ' | ||
+ | printf -v line ' | ||
+ | |||
+ | log " | ||
+ | log "| $TEXT_INPUT${char// | ||
+ | log " | ||
+ | } | ||
+ | |||
+ | function logline () { | ||
+ | # Parameters. | ||
+ | TEXT_INPUT=" | ||
+ | TRUE_FALSE=" | ||
+ | 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=" | ||
+ | fi | ||
+ | |||
+ | printf -v char ' | ||
+ | |||
+ | if [ " | ||
+ | log " | ||
+ | else | ||
+ | log " | ||
+ | fi | ||
+ | } | ||
+ | |||
+ | function checkcommand () { | ||
+ | # Parameters. | ||
+ | CHECK_COMMAND=" | ||
+ | |||
+ | if [ ! -s " | ||
+ | logline "Check if command ' | ||
+ | error 10 | ||
+ | else | ||
+ | logline "Check if command ' | ||
+ | fi | ||
} | } | ||
Zeile 312: | Zeile 598: | ||
log "" | log "" | ||
RUN_TIMESTAMP=`$DATE_COMMAND ' | RUN_TIMESTAMP=`$DATE_COMMAND ' | ||
- | log "+-----------------------------------------------------------------+" | + | headerblock |
- | log " | + | |
- | 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 " | + | log " |
- | log " | + | log " |
+ | log "" | ||
+ | log " | ||
+ | log " | ||
+ | log "" | ||
+ | log " | ||
+ | log " | ||
log "" | log "" | ||
- | # Check if command (file) NOT exist OR IS empty. | + | # Check if compress extension is allowed. |
- | if [ ! -s "$DSYNC_COMMAND" | + | if [[ $COMPRESSION |
- | | + | |
- | | + | |
- | | + | |
- | exit 11 | + | log "" |
- | else | + | error 19 |
- | log "Check if command ' | + | |
fi | fi | ||
# Check if command (file) NOT exist OR IS empty. | # Check if command (file) NOT exist OR IS empty. | ||
- | if [ ! -s "$TAR_COMMAND" | + | checkcommand |
- | log "Check if command '$TAR_COMMAND' was found......................[FAILED]" | + | checkcommand |
- | | + | checkcommand $TOUCH_COMMAND |
- | | + | checkcommand $RM_COMMAND |
- | exit 12 | + | checkcommand $CAT_COMMAND |
- | else | + | checkcommand $DATE_COMMAND |
- | log "Check if command '$TAR_COMMAND' | + | checkcommand |
- | 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 = ' |
- | if [ ! -s "$TOUCH_COMMAND" | + | |
- | | + | |
- | sendmail ERROR | + | |
- | movelog | + | |
- | exit 13 | + | |
- | else | + | |
- | log "Check if command ' | + | |
fi | fi | ||
- | # Check if command (file) NOT exist OR IS empty. | + | if [ $COMPRESSION = ' |
- | if [ ! -s "$RM_COMMAND" | + | |
- | | + | |
- | sendmail ERROR | + | |
- | movelog | + | |
- | exit 14 | + | |
- | else | + | |
- | log "Check if command ' | + | |
fi | fi | ||
- | # Check if command (file) NOT exist OR IS empty. | + | # Check if LOCK file NOT exist. |
- | if [ ! -s "$CAT_COMMAND" ]; then | + | if [ ! -e "$FILE_LOCK" ]; then |
- | | + | |
- | sendmail ERROR | + | |
- | movelog | + | |
- | exit 15 | + | |
- | else | + | |
- | log "Check if command ' | + | |
- | fi | + | |
- | # Check if command (file) NOT exist OR IS empty. | + | |
- | if [ ! -s "$DATE_COMMAND" | + | |
- | log "Check if command '$DATE_COMMAND' | + | |
- | sendmail ERROR | + | |
- | movelog | + | |
- | exit 16 | + | |
else | else | ||
- | | + | |
+ | log "" | ||
+ | log " | ||
+ | log "" | ||
+ | error 20 | ||
fi | fi | ||
- | # Check if command (file) | + | # Check if TMP_FOLDER directory path NOT exists, else create it. |
- | if [ ! -s "$MKDIR_COMMAND" ]; then | + | if [ ! -d "$TMP_FOLDER" ]; then |
- | | + | |
- | | + | $MKDIR_COMMAND |
- | | + | if [ " |
- | exit 17 | + | logline |
+ | error 21 | ||
+ | else | ||
+ | logline " | ||
+ | fi | ||
else | else | ||
- | | + | |
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 [ " |
- | | + | |
- | | + | $CHOWN_COMMAND |
- | | + | if [ " |
- | exit 18 | + | logline |
+ | error 22 | ||
+ | else | ||
+ | | ||
+ | fi | ||
else | else | ||
- | | + | |
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 [ " |
- | | + | |
- | | + | $CHOWN_COMMAND -R $MAILDIR_USER: |
- | | + | if [ " |
- | exit 19 | + | logline "Set ownership of TMP_FOLDER to $MAILDIR_USER: |
+ | error 23 | ||
+ | else | ||
+ | | ||
+ | fi | ||
else | else | ||
- | | + | |
fi | fi | ||
- | # Check if command (file) | + | # Check if DIR_BACKUP directory |
- | if [ ! -s "$GREP_COMMAND" ]; then | + | if [ ! -d "$DIR_BACKUP" ]; then |
- | | + | |
- | | + | $MKDIR_COMMAND -p $DIR_BACKUP |
- | | + | if [ " |
- | exit 20 | + | logline |
+ | error 24 | ||
+ | else | ||
+ | logline " | ||
+ | fi | ||
else | else | ||
- | | + | |
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 [ " |
- | | + | |
- | | + | $CHOWN_COMMAND -R $MAILDIR_USER: |
- | | + | if [ " |
- | exit 21 | + | logline "Set ownership of DIR_BACKUP to $MAILDIR_USER: |
+ | error 25 | ||
+ | else | ||
+ | | ||
+ | fi | ||
else | else | ||
- | | + | |
fi | fi | ||
- | # Check if LOCK file NOT exist. | + | # Check if DIR_BACKUP group is $MAILDIR_GROUP. |
- | if [ ! -e "$FILE_LOCK" ]; then | + | if [ " |
- | | + | |
- | + | $CHOWN_COMMAND -R $MAILDIR_USER: | |
- | $TOUCH_COMMAND | + | if [ " |
+ | logline | ||
+ | error 26 | ||
+ | else | ||
+ | logline "Set ownership of DIR_BACKUP to $MAILDIR_USER: | ||
+ | fi | ||
else | else | ||
- | | + | |
- | log "" | + | |
- | log " | + | |
- | log "" | + | |
- | sendmail ERROR | + | |
- | movelog | + | |
- | exit 30 | + | |
- | fi | + | |
- | + | ||
- | # Check if DIR_BACKUP Directory NOT exists. | + | |
- | if [ ! -d "$DIR_BACKUP" | + | |
- | log "Check if DIR_BACKUP exists.................................[FAILED]" | + | |
- | $MKDIR_COMMAND -p $DIR_BACKUP | + | |
- | log " | + | |
- | else | + | |
- | log "Check if DIR_BACKUP exists.................................[ | + | |
fi | fi | ||
Zeile 463: | Zeile 749: | ||
log "" | log "" | ||
if [ ! -n " | if [ ! -n " | ||
- | log "Check if the variable FILE_USERLIST is set.................[ | + | log "Check if the variable FILE_USERLIST is set ................[ |
log " | log " | ||
- | | + | for users in `doveadm user " |
- | VAR_LISTED_USER+=($users); | + | VAR_LISTED_USER+=($users); |
- | done | + | done |
else | else | ||
- | | + | |
- | log " | + | log " |
log "" | log "" | ||
log "- File: [$FILE_USERLIST]" | log "- File: [$FILE_USERLIST]" | ||
- | | + | # Check if file exists. |
- | if [ -f " | + | if [ -f " |
- | | + | |
- | else | + | else |
- | | + | |
- | log "" | + | log "" |
- | | + | error 30 |
- | movelog | + | fi |
- | exit 40 | + | |
- | fi | + | |
- | | + | # Check if file is readable. |
- | if [ -r " | + | if [ -r " |
- | | + | |
- | else | + | else |
- | | + | |
- | log "" | + | log "" |
- | | + | error 31 |
- | movelog | + | fi |
- | exit 41 | + | |
- | fi | + | |
- | | + | # 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 " | + | if [ $FILE_USERLIST_VALIDATE_EMAIL = ' |
- | VAR_LISTED_USER+=($line); | + | # Check if basic email address syntax is valid. |
- | else | + | if echo " |
- | log "" | + | VAR_LISTED_USER+=($line); |
- | log " | + | else |
+ | log "" | ||
+ | log " | ||
- | | + | ((VAR_COUNT_FAIL++)) |
- | VAR_FAILED_USER+=($line); | + | VAR_FAILED_USER+=($line); |
- | fi | + | fi |
- | done <" | + | else |
+ | VAR_LISTED_USER+=($line); | ||
+ | fi | ||
+ | done <" | ||
+ | |||
+ | # Check if VAR_COUNT_FAIL is greater than zero. If YES, set VAR_COUNT_USER to VAR_COUNT_FAIL. | ||
+ | if [ " | ||
+ | VAR_COUNT_USER=$VAR_COUNT_FAIL | ||
+ | fi | ||
fi | fi | ||
# Start backup. | # Start backup. | ||
log "" | log "" | ||
- | log "+-----------------------------------------------------------------+" | + | headerblock |
- | log " | + | |
- | log " | + | |
log "" | log "" | ||
+ | |||
+ | # Make temporary directory DIR_TEMP inside TMP_FOLDER. | ||
+ | DIR_TEMP=$($MKTEMP_COMMAND $MKTEMP_COMMAND_PARAM_ARG) | ||
+ | if [ " | ||
+ | logline " | ||
+ | error 40 | ||
+ | else | ||
+ | logline " | ||
+ | log "" | ||
+ | fi | ||
+ | |||
+ | # Set ownership to DIR_TEMP. | ||
+ | $CHOWN_COMMAND -R $MAILDIR_USER: | ||
+ | if [ " | ||
+ | | ||
+ | error 41 | ||
+ | else | ||
+ | | ||
+ | log "" | ||
+ | fi | ||
# Start real backup process for all users. | # Start real backup process for all users. | ||
for users in " | for users in " | ||
- | | + | log "Start backup process for user: $users ..." |
- | | + | ((VAR_COUNT_USER++)) |
- | DOMAINPART=${users# | + | DOMAINPART=${users# |
- | LOCALPART=${users%%@*} | + | LOCALPART=${users%%@*} |
- | LOCATION=" | + | LOCATION=" |
- | USERPART=" | + | USERPART=" |
- | | + | log " |
- | $DSYNC_COMMAND -o plugin/ | + | |
- | | + | if [ "$OSTYPE" = "FreeBSD" ]; then |
- | | + | |
- | case "$?" in | + | else |
- | 1) log " | + | $DSYNC_COMMAND |
- | ;; | + | fi |
- | 2) log " | + | |
- | ;; | + | |
- | | + | |
- | if [ "$?" | + | |
- | log " | + | |
- | fi | + | |
- | ((VAR_COUNT_FAIL++)) | + | # Check the status of dsync and continue the script depending on the result. |
- | | + | if [ " |
- | | + | case "$?" in |
- | | + | 1) log " |
+ | ;; | ||
+ | 2) log " | ||
+ | ;; | ||
+ | esac | ||
+ | if [ " | ||
+ | log " | ||
+ | fi | ||
- | cd $DIR_BACKUP | + | ((VAR_COUNT_FAIL++)) |
+ | VAR_FAILED_USER+=($users); | ||
+ | else | ||
+ | log " | ||
- | log " | + | cd $DIR_TEMP |
- | $TAR_COMMAND -cvzf $users-$FILE_BACKUP $USERPART --atime-preserve --preserve-permissions | + | |
- | | + | log "Packaging to archive for user: $users ..." |
- | (ls -t $users-$FILE_DELETE|head -n $BACKUPFILES_DELETE; | + | if [ "$OSTYPE" = "FreeBSD" ]; then |
- | | + | $TAR_COMMAND -cvzf $users-$FILE_BACKUP $USERPART |
- | log " | + | else |
- | else | + | $TAR_COMMAND -cvzf $users-$FILE_BACKUP $USERPART --atime-preserve --preserve-permissions |
- | log " | + | fi |
- | fi | + | |
- | | + | log " |
- | $RM_COMMAND "$DIR_BACKUP/ | + | $RM_COMMAND |
- | if [ " | + | if [ " |
- | | + | |
- | else | + | else |
- | | + | |
- | fi | + | fi |
- | | + | |
- | | + | log " |
+ | $MV_COMMAND " | ||
+ | if [ " | ||
+ | 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 " | ||
+ | (ls -t $users-$FILE_DELETE|head -n $BACKUPFILES_DELETE; | ||
+ | if [ " | ||
+ | logline " | ||
+ | else | ||
+ | logline " | ||
+ | fi | ||
+ | fi | ||
+ | |||
+ | log "Ended backup process for user: $users ..." | ||
log "" | log "" | ||
done | done | ||
- | # Set owner and rights permissions | + | # Delete the temporary folder DIR_TEMP. |
+ | $RM_COMMAND -rf $DIR_TEMP | ||
+ | if [ " | ||
+ | logline " | ||
+ | error 42 | ||
+ | else | ||
+ | logline " | ||
+ | log "" | ||
+ | fi | ||
+ | |||
+ | # Set ownership | ||
$CHOWN_COMMAND -R $MAILDIR_USER: | $CHOWN_COMMAND -R $MAILDIR_USER: | ||
+ | if [ " | ||
+ | | ||
+ | error 43 | ||
+ | else | ||
+ | | ||
+ | fi | ||
+ | |||
+ | # Set rights permission to backup directory. | ||
$CHMOD_COMMAND 700 $DIR_BACKUP | $CHMOD_COMMAND 700 $DIR_BACKUP | ||
+ | if [ " | ||
+ | | ||
+ | error 44 | ||
+ | else | ||
+ | | ||
+ | fi | ||
+ | |||
+ | # Set rights permissions to backup files. | ||
$CHMOD_COMMAND -R 600 $DIR_BACKUP/ | $CHMOD_COMMAND -R 600 $DIR_BACKUP/ | ||
+ | if [ " | ||
+ | | ||
+ | error 45 | ||
+ | else | ||
+ | | ||
+ | log "" | ||
+ | fi | ||
# Delete LOCK file. | # Delete LOCK file. | ||
Zeile 586: | Zeile 948: | ||
log "" | log "" | ||
$RM_COMMAND -f $FILE_LOCK | $RM_COMMAND -f $FILE_LOCK | ||
- | sendmail ERROR | + | error |
- | movelog | + | |
- | exit 99 | + | |
else | else | ||
- | log "+-----------------------------------------------------------------+" | + | headerblock |
- | log " | + | |
- | log " | + | |
log "" | log "" | ||
fi | fi | ||
# Finish syncing with runntime statistics. | # Finish syncing with runntime statistics. | ||
- | log "+-----------------------------------------------------------------+" | + | headerblock |
- | log " | + | |
- | log " | + | |
log "" | log "" | ||
log "- Number of determined users: $VAR_COUNT_USER" | log "- Number of determined users: $VAR_COUNT_USER" | ||
Zeile 605: | Zeile 961: | ||
if [ " | if [ " | ||
- | | + | log "- ...Mailbox of failed users: " |
- | for i in " | + | for i in " |
- | do | + | do |
- | log "- ... $i" | + | log "- ... $i" |
- | done | + | done |
fi | fi | ||
log "" | log "" | ||
END_TIMESTAMP=`$DATE_COMMAND ' | END_TIMESTAMP=`$DATE_COMMAND ' | ||
- | log " | + | if [ " |
+ | DIFF_TIMESTAMP=$(($RUN_TIMESTAMP-$END_TIMESTAMP)) | ||
+ | log " | ||
+ | else | ||
+ | log " | ||
+ | fi | ||
log "" | log "" | ||
- | log "+-----------------------------------------------------------------+" | + | headerblock |
- | log " | + | |
- | log " | + | |
log "" | log "" | ||
Zeile 624: | Zeile 983: | ||
if [ " | if [ " | ||
sendmail ERROR | sendmail ERROR | ||
- | | + | # Move the log to the permanent log file. |
- | exit 1 | + | movelog |
+ | exit 1 | ||
else | else | ||
- | | + | # Status e-mail. |
- | if [ $MAIL_STATUS = ' | + | if [ $MAIL_STATUS = ' |
- | sendmail STATUS | + | sendmail STATUS |
- | fi | + | fi |
- | movelog | + | # Move the log to the permanent log file. |
- | exit 0 | + | movelog |
+ | exit 0 | ||
fi | fi | ||
</ | </ | ||
Zeile 652: | Zeile 1013: | ||
klaus@tachtler.net | klaus@tachtler.net | ||
petra@tachtler.net | petra@tachtler.net | ||
+ | </ | ||
+ | **__oder__** | ||
+ | |||
+ | < | ||
+ | klaus | ||
+ | petra | ||
</ | </ | ||
Zeile 661: | Zeile 1028: | ||
**__OHNE__ '' | **__OHNE__ '' | ||
< | < | ||
- | 2019/01/30 14: | + | # /root/Install/ |
- | 2019/01/30 14: | + | |
- | 2019/01/30 14: | + | +-------------------------------------------------------------------+ |
- | 2019/01/30 14: | + | | Start backup of the mailboxes [Sat, 02 Oct 2021 08:18:37 (+0200)] | |
- | 2019/01/30 14: | + | +-------------------------------------------------------------------+ |
- | 2019/01/30 14: | + | |
- | 2019/01/30 14:24:28 INFO: SCRIPT_NAME...: dovecot_backup | + | SCRIPT_NAME.................: dovecot_backup |
- | 2019/01/30 14: | + | |
- | 2019/01/30 14: | + | OS_TYPE.....................: linux-gnu |
- | 2019/01/30 14: | + | |
- | 2019/01/30 14: | + | COMPRESSION.................: gz |
- | 2019/01/30 14: | + | |
- | 2019/01/30 14: | + | TMP_FOLDER..................: /srv/backup |
- | 2019/01/30 14: | + | DIR_BACKUP..................: / |
- | 2019/01/30 14: | + | |
- | 2019/01/30 14: | + | MAIL_RECIPIENT..............: you@example.com |
- | 2019/01/30 14: | + | MAIL_STATUS.................: N |
- | 2019/01/30 14: | + | |
- | 2019/01/30 14: | + | FILE_USERLIST...............: |
- | 2019/01/30 14: | + | FILE_USERLIST_VALIDATE_EMAIL: N |
- | 2019/01/30 14: | + | |
- | 2019/01/30 14: | + | Check if command |
- | 2019/01/30 14: | + | Check if command ' |
- | 2019/01/30 14: | + | Check if command |
- | 2019/01/30 14: | + | Check if command ' |
- | 2019/01/30 14: | + | Check if command |
- | 2019/01/30 14: | + | Check if command |
- | 2019/01/30 14: | + | Check if command ' |
- | 2019/01/30 14: | + | Check if command |
- | 2019/01/30 14: | + | Check if command ' |
- | 2019/01/30 14: | + | Check if command |
- | 2019/01/30 14: | + | Check if command ' |
- | 2019/01/30 14: | + | Check if command |
- | 2019/01/30 14: | + | Check if command |
- | 2019/01/30 14: | + | Check if command ' |
- | 2019/01/30 14: | + | Check if command |
- | 2019/01/30 14: | + | Check if the script is NOT already runnig |
- | 2019/01/30 14: | + | Check if TMP_FOLDER exists ................................[ OK ] |
- | 2019/01/30 14: | + | Check if TMP_FOLDER owner is vmail ........................[ OK ] |
- | 2019/01/30 14: | + | Check if TMP_FOLDER group is vmail ........................[ OK ] |
- | 2019/01/30 14: | + | Check if DIR_BACKUP exists ................................[ OK ] |
- | 2019/01/30 14: | + | 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: | + | |
- | 2019/01/30 14: | + | Check if the variable FILE_USERLIST is set ................[ NO ] |
- | 2019/01/30 14: | + | Mailboxes to backup will be determined by doveadm user " |
- | 2019/01/30 14: | + | |
- | 2019/01/30 14: | + | +-----------------------------------------------------------------+ |
- | 2019/01/30 14: | + | | Run backup dovecot_backup ..................................... | |
- | 2019/01/30 14: | + | +-----------------------------------------------------------------+ |
- | 2019/01/30 14:27:57 INFO: Delete old archive files /srv/backup .....................[ OK ] | + | |
- | 2019/01/30 14: | + | Create temporary '/srv/backup/dovecot_backup-0UCtpQfhdsiH' |
- | 2019/01/30 14: | + | |
- | 2019/01/30 14: | + | Set ownership of DIR_TEMP to vmail:vmail ..................[ OK ] |
- | 2019/01/30 14: | + | |
- | 2019/01/30 14: | + | Start backup process for user: ... |
- | 2019/01/30 14: | + | ... |
- | 2019/01/30 14: | + | ... |
- | 2019/01/30 14: | + | ... |
- | 2019/01/30 14: | + | ... |
- | 2019/01/30 14: | + | Set ownership of DIR_BACKUP to vmail:vmail ................[ OK ] |
- | 2019/01/30 14: | + | Set permission of DIR_BACKUP to drwx------ |
- | 2019/01/30 14: | + | Set file permissions in DIR_BACKUP to -rw------- |
- | 2019/01/30 14: | + | |
- | 2019/01/30 14: | + | +-----------------------------------------------------------------+ |
- | 2019/01/30 14: | + | | End backup dovecot_backup ..................................... | |
- | 2019/01/30 14: | + | +-----------------------------------------------------------------+ |
- | 2019/01/30 14: | + | |
- | 2019/01/30 14: | + | +-----------------------------------------------------------------+ |
- | 2019/01/30 14: | + | | Runtime statistics ............................................ | |
- | 2019/01/30 14: | + | +-----------------------------------------------------------------+ |
- | 2019/01/30 14: | + | |
+ | - Number of determined users: | ||
+ | - ...Summary of failed users: 0 | ||
+ | |||
+ | Runtime: 00:01:54 time elapsed. | ||
+ | |||
+ | +-------------------------------------------------------------------+ | ||
+ | | Finished creating the backups [Sat, 02 Oct 2021 08:20:31 (+0200)] | | ||
+ | +-------------------------------------------------------------------+ | ||
</ | </ | ||
**__MIT__ '' | **__MIT__ '' | ||
< | < | ||
- | 2019/01/30 15: | + | # /root/Install/ |
- | 2019/01/30 15: | + | |
- | 2019/01/30 15: | + | +-------------------------------------------------------------------+ |
- | 2019/01/30 15: | + | | Start backup of the mailboxes [Sat, 02 Oct 2021 08:06:04 (+0200)] | |
- | 2019/01/30 15: | + | +-------------------------------------------------------------------+ |
- | 2019/01/30 15: | + | |
- | 2019/01/30 15: | + | SCRIPT_NAME.................: dovecot_backup |
- | 2019/01/30 15: | + | |
- | 2019/01/30 15: | + | OS_TYPE.....................: linux-gnu |
- | 2019/01/30 15: | + | |
- | 2019/01/30 15: | + | COMPRESSION.................: gz |
- | 2019/01/30 15: | + | |
- | 2019/01/30 15: | + | TMP_FOLDER..................: |
- | 2019/01/30 15: | + | DIR_BACKUP..................: / |
- | 2019/01/30 15: | + | |
- | 2019/01/30 15: | + | MAIL_RECIPIENT..............: you@example.com |
- | 2019/01/30 15: | + | MAIL_STATUS.................: N |
- | 2019/01/30 15: | + | |
- | 2019/01/30 15: | + | FILE_USERLIST...............: |
- | 2019/01/30 15: | + | FILE_USERLIST_VALIDATE_EMAIL: N |
- | 2019/01/30 15: | + | |
- | 2019/01/30 15: | + | Check if command |
- | 2019/01/30 15: | + | Check if command ' |
- | 2019/01/30 15: | + | Check if command |
- | 2019/01/30 15: | + | Check if command ' |
- | 2019/01/30 15: | + | Check if command |
- | 2019/01/30 15: | + | Check if command |
- | 2019/01/30 15: | + | Check if command ' |
- | 2019/01/30 15: | + | Check if command |
- | 2019/01/30 15: | + | Check if command ' |
- | 2019/01/30 15: | + | Check if command |
- | 2019/01/30 15: | + | Check if command ' |
- | 2019/01/30 15: | + | Check if command |
- | 2019/01/30 15: | + | Check if command |
- | 2019/01/30 15: | + | Check if command ' |
- | 2019/01/30 15: | + | Check if command |
- | 2019/01/30 15: | + | Check if the script is NOT already runnig |
- | 2019/01/30 15: | + | Check if TMP_FOLDER exists ................................[ OK ] |
- | 2019/01/30 15: | + | Check if TMP_FOLDER owner is vmail ........................[ OK ] |
- | 2019/01/30 15: | + | Check if TMP_FOLDER group is vmail ........................[ OK ] |
- | 2019/01/30 15: | + | Check if DIR_BACKUP exists ................................[ OK ] |
- | 2019/01/30 15: | + | Check if DIR_BACKUP owner is vmail ........................[ OK ] |
- | 2019/01/30 15: | + | Check if DIR_BACKUP group is vmail ........................[ OK ] |
- | 2019/01/30 15: | + | |
- | 2019/01/30 15: | + | Check if the variable FILE_USERLIST is set ................[ OK ] |
- | 2019/01/30 15: | + | Mailboxes to backup will be read from file. |
- | 2019/01/30 15: | + | |
- | 2019/01/30 15: | + | - File: [/srv/ |
- | 2019/01/30 15: | + | - Check if FILE_USERLIST exists ...........................[ OK ] |
- | 2019/01/30 15: | + | - Check if FILE_USERLIST is readable ......................[ OK ] |
- | 2019/01/30 15: | + | |
- | 2019/01/30 15: | + | +-----------------------------------------------------------------+ |
- | 2019/01/30 15: | + | | Run backup dovecot_backup ..................................... | |
- | 2019/01/30 15: | + | +-----------------------------------------------------------------+ |
- | 2019/01/30 15: | + | |
- | 2019/01/30 15: | + | Create temporary '/srv/backup/ |
- | 2019/01/30 15: | + | |
- | 2019/01/30 15: | + | Set ownership of DIR_TEMP to vmail:vmail ..................[ OK ] |
- | 2019/01/30 15: | + | |
- | 2019/01/30 15: | + | Start backup process for user: klaus@tachtler.net ... |
- | 2019/01/30 15: | + | Extract mailbox data for user: klaus@tachtler.net ... |
- | 2019/01/30 15: | + | ... |
- | 2019/01/30 15: | + | ... |
- | 2019/01/30 15: | + | Synchronization done for user: klaus@tachtler.net ... |
- | 2019/01/30 15: | + | Packaging to archive for user: klaus@tachtler.net ... |
- | 2019/01/30 15: | + | ... |
- | 2019/01/30 15: | + | ... |
- | 2019/01/30 15: | + | Delete |
- | 2019/01/30 15: | + | Delete |
- | 2019/01/30 15: | + | Copying archive file for user: klaus@tachtler.net ... |
- | 2019/01/30 15: | + | Move archive file for user to: / |
- | 2019/01/30 15: | + | Delete |
- | 2019/01/30 15: | + | Delete |
- | 2019/01/30 15: | + | Ended backup process for user: klaus@tachtler.net ... |
- | 2019/01/30 15: | + | |
- | 2019/01/30 15: | + | Start backup process for user: petra@tachtler.net ... |
- | 2019/01/30 15: | + | Extract mailbox data for user: petra@tachtler.net ... |
- | 2019/01/30 15: | + | ... |
- | 2019/01/30 15: | + | ... |
+ | Synchronization done for user: petra@tachtler.net ... | ||
+ | Packaging to archive for user: petra@tachtler.net ... | ||
+ | ... | ||
+ | ... | ||
+ | Delete | ||
+ | Delete | ||
+ | Copying archive file for user: petra@tachtler.net ... | ||
+ | Move archive file for user to: / | ||
+ | Delete | ||
+ | Delete | ||
+ | Ended backup process for user: petra@tachtler.net ... | ||
+ | |||
+ | Delete temporary '/srv/backup/ | ||
+ | |||
+ | 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: | ||
+ | |||
+ | Runtime: 00:01:46 time elapsed. | ||
+ | |||
+ | +-------------------------------------------------------------------+ | ||
+ | | Finished creating the backups [Sat, 02 Oct 2021 08:07:50 (+0200)] | | ||
+ | +-------------------------------------------------------------------+ | ||
</ | </ | ||
Zeile 914: | Zeile 1325: | ||
- Das Backup befindet sich unter **''/ | - Das Backup befindet sich unter **''/ | ||
- Der Benutzer lautet **'' | - Der Benutzer lautet **'' | ||
+ | ***.tar.gz-Komprimierungsmethode** | ||
+ | < | ||
+ | # tar -avzf / | ||
+ | </ | ||
+ | ***.tar.zst-Komprimierungsmethode** | ||
+ | < | ||
+ | # tar -avzf / | ||
+ | </ | ||
+ | |||
+ | :!: **HINWEIS** - Der Paramter **'' | ||
< | < | ||
- | # tar -xvzf / | + | -a, --auto-compress |
+ | use archive suffix to determine the compression program | ||
</ | </ | ||
tachtler/dovecot_backup_-_skript.txt · Zuletzt geändert: 2023/07/05 19:07 von klaus