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 21:56] – [Skript - Log] klaus | tachtler:dovecot_backup_-_skript [2019/10/16 14:51] – [Skript] klaus | ||
---|---|---|---|
Zeile 82: | Zeile 82: | ||
^ Parametername | ^ Parametername | ||
| '' | | '' | ||
- | | '' | + | | '' |
| '' | | '' | ||
| '' | | '' | ||
Zeile 126: | Zeile 126: | ||
# will be send by e-mail. | # will be send by e-mail. | ||
# # | # # | ||
- | # Last update : 30.01.2019 # | + | # Last update : 08.10.2019 # |
- | # Version | + | # Version |
# # | # # | ||
# Author | # Author | ||
Zeile 204: | Zeile 204: | ||
# | # | ||
# | # | ||
+ | # -------------------------------------------------------------------------- # | ||
+ | # 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 | # Version | ||
Zeile 218: | Zeile 232: | ||
# CUSTOM - Backup-Files. | # CUSTOM - Backup-Files. | ||
+ | TMP_FOLDER='/ | ||
DIR_BACKUP='/ | DIR_BACKUP='/ | ||
FILE_BACKUP=dovecot_backup_`date ' | FILE_BACKUP=dovecot_backup_`date ' | ||
Zeile 261: | Zeile 276: | ||
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=`which --skip-alias mv` | ||
FILE_LOCK='/ | FILE_LOCK='/ | ||
FILE_LOG='/ | FILE_LOG='/ | ||
Zeile 321: | Zeile 338: | ||
$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 326: | Zeile 411: | ||
log "" | log "" | ||
RUN_TIMESTAMP=`$DATE_COMMAND ' | RUN_TIMESTAMP=`$DATE_COMMAND ' | ||
- | log "+-----------------------------------------------------------------+" | + | headerblock |
- | log " | + | |
- | log " | + | |
log "" | log "" | ||
log " | log " | ||
log "" | log "" | ||
+ | log " | ||
log " | log " | ||
log "" | log "" | ||
Zeile 342: | Zeile 426: | ||
# Check if command (file) NOT exist OR IS empty. | # Check if command (file) NOT exist OR IS empty. | ||
- | if [ ! -s "$DSYNC_COMMAND" ]; then | + | checkcommand |
- | log "Check if command ' | + | checkcommand |
- | sendmail ERROR | + | checkcommand |
- | movelog | + | checkcommand |
- | exit 11 | + | checkcommand |
- | else | + | checkcommand |
- | log "Check if command ' | + | checkcommand |
- | fi | + | checkcommand |
- | + | checkcommand | |
- | # Check if command (file) NOT exist OR IS empty. | + | checkcommand |
- | if [ ! -s "$TAR_COMMAND" ]; then | + | checkcommand |
- | log "Check if command ' | + | checkcommand |
- | sendmail ERROR | + | checkcommand |
- | movelog | + | |
- | exit 12 | + | |
- | else | + | |
- | log "Check if command ' | + | |
- | fi | + | |
- | + | ||
- | # Check if command (file) NOT exist OR IS empty. | + | |
- | if [ ! -s "$TOUCH_COMMAND" ]; then | + | |
- | log "Check if command ' | + | |
- | sendmail ERROR | + | |
- | movelog | + | |
- | exit 13 | + | |
- | else | + | |
- | log "Check if command ' | + | |
- | fi | + | |
- | + | ||
- | # Check if command (file) NOT exist OR IS empty. | + | |
- | if [ ! -s "$RM_COMMAND" ]; then | + | |
- | log "Check if command ' | + | |
- | sendmail ERROR | + | |
- | movelog | + | |
- | exit 14 | + | |
- | else | + | |
- | log "Check if command ' | + | |
- | fi | + | |
- | + | ||
- | # Check if command (file) NOT exist OR IS empty. | + | |
- | if [ ! -s "$CAT_COMMAND" ]; then | + | |
- | log "Check if command ' | + | |
- | sendmail ERROR | + | |
- | movelog | + | |
- | exit 15 | + | |
- | else | + | |
- | log "Check if command ' | + | |
- | fi | + | |
- | + | ||
- | # Check if command (file) NOT exist OR IS empty. | + | |
- | if [ ! -s "$DATE_COMMAND" ]; then | + | |
- | log "Check if command ' | + | |
- | sendmail ERROR | + | |
- | movelog | + | |
- | exit 16 | + | |
- | else | + | |
- | log "Check if command ' | + | |
- | fi | + | |
- | + | ||
- | # Check if command (file) NOT exist OR IS empty. | + | |
- | if [ ! -s "$MKDIR_COMMAND" ]; then | + | |
- | log "Check if command ' | + | |
- | sendmail ERROR | + | |
- | movelog | + | |
- | exit 17 | + | |
- | else | + | |
- | log "Check if command ' | + | |
- | fi | + | |
- | + | ||
- | # Check if command (file) NOT exist OR IS empty. | + | |
- | if [ ! -s "$CHOWN_COMMAND" ]; then | + | |
- | log "Check if command ' | + | |
- | sendmail ERROR | + | |
- | movelog | + | |
- | exit 18 | + | |
- | else | + | |
- | log "Check if command ' | + | |
- | fi | + | |
- | + | ||
- | # Check if command (file) NOT exist OR IS empty. | + | |
- | if [ ! -s "$CHMOD_COMMAND" ]; then | + | |
- | log "Check if command ' | + | |
- | sendmail ERROR | + | |
- | movelog | + | |
- | exit 19 | + | |
- | else | + | |
- | log "Check if command ' | + | |
- | fi | + | |
- | + | ||
- | # Check if command (file) NOT exist OR IS empty. | + | |
- | if [ ! -s "$GREP_COMMAND" ]; then | + | |
- | log "Check if command '$GREP_COMMAND' | + | |
- | | + | |
- | movelog | + | |
- | exit 20 | + | |
- | else | + | |
- | log "Check if command '$GREP_COMMAND' | + | |
- | fi | + | |
- | + | ||
- | # Check if command (file) NOT exist OR IS empty. | + | |
- | if [ ! -s "$PROG_SENDMAIL" ]; then | + | |
- | log "Check if command ' | + | |
- | sendmail ERROR | + | |
- | movelog | + | |
- | exit 21 | + | |
- | else | + | |
- | log "Check if command ' | + | |
- | fi | + | |
# Check if LOCK file NOT exist. | # Check if LOCK file NOT exist. | ||
if [ ! -e " | if [ ! -e " | ||
- | | + | |
$TOUCH_COMMAND $FILE_LOCK | $TOUCH_COMMAND $FILE_LOCK | ||
else | else | ||
- | | + | |
log "" | log "" | ||
log " | log " | ||
log "" | log "" | ||
- | sendmail ERROR | + | error 20 |
- | movelog | + | |
- | exit 30 | + | |
fi | fi | ||
- | # Check if DIR_BACKUP | + | # Check if DIR_BACKUP |
if [ ! -d " | if [ ! -d " | ||
- | | + | |
$MKDIR_COMMAND -p $DIR_BACKUP | $MKDIR_COMMAND -p $DIR_BACKUP | ||
- | log " | + | if [ " |
+ | logline " | ||
+ | error 21 | ||
+ | else | ||
+ | logline | ||
+ | fi | ||
else | else | ||
- | | + | |
fi | fi | ||
Zeile 478: | Zeile 470: | ||
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 " | ||
Zeile 485: | Zeile 477: | ||
done | done | ||
else | else | ||
- | | + | |
- | log " | + | log " |
log "" | log "" | ||
log "- File: [$FILE_USERLIST]" | log "- File: [$FILE_USERLIST]" | ||
Zeile 492: | Zeile 484: | ||
# Check if file exists. | # Check if file exists. | ||
if [ -f " | if [ -f " | ||
- | log "- Check if FILE_USERLIST exists............................[ | + | logline |
else | else | ||
- | log "- Check if FILE_USERLIST exists............................[FAILED]" | + | logline |
log "" | log "" | ||
- | sendmail ERROR | + | error 30 |
- | movelog | + | |
- | exit 40 | + | |
fi | fi | ||
# Check if file is readable. | # Check if file is readable. | ||
if [ -r " | if [ -r " | ||
- | log "- Check if FILE_USERLIST is readable.......................[ | + | logline |
else | else | ||
- | log "- Check if FILE_USERLIST is readable.......................[FAILED]" | + | logline |
log "" | log "" | ||
- | sendmail ERROR | + | error 31 |
- | movelog | + | |
- | exit 41 | + | |
fi | fi | ||
Zeile 540: | Zeile 528: | ||
# Start backup. | # Start backup. | ||
log "" | log "" | ||
- | log "+-----------------------------------------------------------------+" | + | headerblock |
- | log " | + | |
- | log " | + | |
log "" | log "" | ||
+ | |||
+ | # Check if TMP_FOLDER directory path NOT exists, else create it. | ||
+ | if [ ! -d " | ||
+ | logline "Check if TMP_FOLDER exists " false | ||
+ | $MKDIR_COMMAND -p $TMP_FOLDER | ||
+ | if [ " | ||
+ | logline " | ||
+ | error 40 | ||
+ | else | ||
+ | logline " | ||
+ | fi | ||
+ | else | ||
+ | logline "Check if TMP_FOLDER exists " true | ||
+ | fi | ||
+ | |||
+ | # Make temporary directory DIR_TEMP inside TMP_FOLDER. | ||
+ | DIR_TEMP=$($MKTEMP_COMMAND -d -p $TMP_FOLDER -t $SCRIPT_NAME-XXXXXXXXXXXX) | ||
+ | if [ " | ||
+ | logline " | ||
+ | error 41 | ||
+ | else | ||
+ | logline " | ||
+ | log "" | ||
+ | fi | ||
+ | |||
+ | # Set rights permissions to DIR_TEMP. | ||
+ | $CHOWN_COMMAND -R $MAILDIR_USER: | ||
# Start real backup process for all users. | # Start real backup process for all users. | ||
Zeile 552: | Zeile 565: | ||
DOMAINPART=${users# | DOMAINPART=${users# | ||
LOCALPART=${users%%@*} | LOCALPART=${users%%@*} | ||
- | LOCATION=" | + | LOCATION=" |
USERPART=" | USERPART=" | ||
Zeile 575: | Zeile 588: | ||
log " | log " | ||
- | cd $DIR_BACKUP | + | cd $DIR_TEMP |
log " | log " | ||
$TAR_COMMAND -cvzf $users-$FILE_BACKUP $USERPART --atime-preserve --preserve-permissions | $TAR_COMMAND -cvzf $users-$FILE_BACKUP $USERPART --atime-preserve --preserve-permissions | ||
- | log " | + | log " |
- | (ls -t $users-$FILE_DELETE|head -n $BACKUPFILES_DELETE; | + | $RM_COMMAND "$DIR_TEMP/$DOMAINPART" |
if [ " | if [ " | ||
- | log " | + | logline |
else | else | ||
- | log " | + | logline |
fi | fi | ||
- | log "Delete mailbox files for user: $users ..." | + | log "Copying archive file for user: $users ..." |
- | $RM_COMMAND | + | $MV_COMMAND |
if [ " | if [ " | ||
- | log "Delete mailbox files at: $DIR_BACKUP | + | logline |
else | else | ||
- | log " | + | 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 | ||
fi | fi | ||
Zeile 600: | Zeile 623: | ||
log "" | log "" | ||
done | done | ||
+ | |||
+ | # Delete the temporary folder DIR_TEMP. | ||
+ | $RM_COMMAND $DIR_TEMP -rf | ||
+ | if [ " | ||
+ | logline " | ||
+ | error 42 | ||
+ | else | ||
+ | logline " | ||
+ | log "" | ||
+ | fi | ||
# Set owner and rights permissions to backup directory and backup files. | # Set owner and rights permissions to backup directory and backup files. | ||
Zeile 611: | Zeile 644: | ||
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 641: | Zeile 668: | ||
log " | log " | ||
log "" | log "" | ||
- | log "+-----------------------------------------------------------------+" | + | headerblock |
- | log " | + | |
- | log " | + | |
log "" | log "" | ||
tachtler/dovecot_backup_-_skript.txt · Zuletzt geändert: 2023/07/05 19:07 von klaus