So, mein Syncronisierungsscript funzt soweit ich weiß
Allerdings ist es noch nicht überarbeitet und immo teilweise nur für SSH.
(Es wurde erstmal ganz das Motto "hauptsache es läuft" verfolgt)
Es wird einfach im Target Ordner die Ordner erstellt, die in Sources erstellt wurden.
Bei jedem ausführen werden diese Verzeichnisse aktualisiert.
zusätzlich wird im Target ein Ordner Namens Log erstellt.
In diesem ist wird ein Jahres Ordner erstellt und in diesem die Log genannt nach den Monatszahlen.
Die LOGs werden bei jeder Ausführung überschrieben bis ein neuer Monat und/oder ein neues Jahr anfängt.
Ungetestet, da ich Postfix nicht hinbekomme:
Ist MAILREC aktiviert, wird am Monatsanfang das LOG gesendet, das zuletzt im letzen Monat gespeichert wird.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111 | #!/bin/bash
# Simple backup with rsync (version 2011-03-10)
# local-mode, tossh-mode, fromssh-mode
SOURCES="/root/ /etc/ /home/ /var/games/"
TARGET="/media/backup-Dell-d610/"
RSYNCCONF="--delete --exclude=/home/dell-d610/.gvfs/ --exclude /home/dell-d610/Backup-HP625"
#MOUNTPOINT="/daten"
PACKAGES=1
#MAILREC=""
SSHUSER="root"
SSHPORT=22
#FROMSSH="clientsystem"
TOSSH="hp-625"
### do not edit ###
MOUNT="/bin/mount"; FGREP="/bin/fgrep"; SSH="/usr/bin/ssh"
LN="/bin/ln"; ECHO="/bin/echo"; DATE="/bin/date"; RM="/bin/rm"
DPKG="/usr/bin/dpkg"; AWK="/usr/bin/awk"; MAIL="/usr/bin/mail"
CUT="/usr/bin/cut"; TR="/usr/bin/tr"; RSYNC="/usr/bin/rsync";
SCP="/usr/bin/scp"; LAST="last"; INC="--link-dest=../$LAST"
MONTH=$(date +%m)
VORMONTH=$(($MONTH-1))
YEAR=$(date +%Y)
VORYEAR=$(($YEAR-1))
LOG=$0.log
LOGDIR="${TARGET}log/"
$DATE > $LOG
if [ $PACKAGES -eq 1 ] && [ -z "$FROMSSH" ]; then
$ECHO -e "$DPKG --get-selections | $AWK '!/deinstall|purge|hold/'|$CUT -f1 | $TR '\n' ' '" >> $LOG
$DPKG --get-selections | $AWK '!/deinstall|purge|hold/'|$CUT -f1 |$TR '\n' ' ' >> $LOG 2>&1
fi
ssh -q root@hp-625 exit;
SSHVERBINDUNG=$?
if [ $SSHVERBINDUNG = 0 ]; then
### !SSH! ###
MOUNTED=$($MOUNT | $FGREP "$MOUNTPOINT");
if [ -z "$MOUNTPOINT" ] || [ -n "$MOUNTED" ]; then
### !SSH! ###
if [ "$SSHUSER" ] && [ "$SSHPORT" ]; then
S="$SSH -p $SSHPORT -l $SSHUSER";
fi
for SOURCE in $($ECHO $SOURCES)
do
if [ "$S" ] && [ "$FROMSSH" ] && [ -z "$TOSSH" ]; then
$ECHO "$RSYNC -e \"$S\" -avR $FROMSSH:$SOURCE $RSYNCCONF $TARGET " >> $LOG
$RSYNC -e "$S" -avR $FROMSSH:$SOURCE $RSYNCCONF $TARGET >> $LOG 2>&1
if [ $? -ne 0 ]; then
ERROR=1
fi
fi
if [ "$S" ] && [ "$TOSSH" ] && [ -z "$FROMSSH" ]; then
$ECHO "$RSYNC -e \"$S\" -avR $SOURCE $RSYNCCONF $TOSSH:$TARGET " >> $LOG
$RSYNC -e "$S" -avR $SOURCE $RSYNCCONF $TOSSH:$TARGET >> $LOG 2>&1
if [ $? -ne 0 ]; then
ERROR=1
fi
fi
if [ -z "$S" ]; then
$ECHO "$RSYNC -avR $SOURCE $RSYNCCONF $TARGET " >> $LOG
$RSYNC -avR $SOURCE $RSYNCCONF $TARGET >> $LOG 2>&1
if [ $? -ne 0 ]; then
ERROR=1
fi
fi
done
else
$ECHO "$MOUNTPOINT not mounted" >> $LOG
ERROR=1
fi
if $SSH -p $SSHPORT $SSHUSER@$TOSSH "[ ! -d "$LOGDIR" ]"; then
$SSH -p $SSHPORT $SSHUSER@$TOSSH "mkdir $LOGDIR"
$ECHO -e "\nPfad $LOGDIR existiert nicht, erstelle den Ordner log." >> $LOG
fi
if $SSH -p $SSHPORT $SSHUSER@$TOSSH "[ ! -d "$LOGDIR$YEAR" ]"; then
if [ -n "$MAILREC" ];then
$MAIL -s "Backup $TOSSSH" $MAILREC < $SSH -p $SSHPORT $SSHUSER@$TOSSH "$LOGDIR$VORYEAR/12.log"
fi
$SSH -p $SSHPORT $SSHUSER@$TOSSH "mkdir $LOGDIR$YEAR"
$ECHO -e "Pfad $LOGDIR$YEAR existiert nicht, erstelle den Ordner $YEAR. \n" >> $LOG
else
if [ -n "$MAILREC" ];then
if $SSH -p $SSHPORT $SSHUSER@$TOSSH "[ ! -e "$LOGDIR$YEAR/$MONTH.log" ]"; then
$MAIL -s "Backup $TOSSSH" $MAILREC < $SSH -p $SSHPORT $SSHUSER@$TOSSH "$LOGDIR$YEAR/0$VORMONTH.log"
fi
fi
fi
$DATE >> $LOG
$SCP -q -P $SSHPORT $LOG $SSHUSER@$TOSSH:$LOGDIR$YEAR/$MONTH.log
else
$ECHO -e "\n \n SSH Verbindung konnte nicht hergestellt werden." >> $LOG
$DATE >> $LOG
fi
### $today , $monthrate $ln $INC gelöscht
|
€dit:
Hab das Script nochmal ein bisschen verändert.
Nun schreibt er erstmal nur die Paketliste (wenn aktiviert) ins Log und prüft dann, ob eine SSH Verbindung vorhanden ist.
Ist keine SSH Verbindung verfügbar, schreibt er das ins LOG und bricht ab.
Allerdings funzt es damit nur per vollständig nur mit SSH, solange es nicht nochmal etwas umgeschrieben wird.
PS:
Habe glaube ich einen "Fehler" im Backup Script gefunden.
Falsch:
| if [ $PACKAGES -eq 1 ] && [ -z "$FROMSSH" ]; then
$ECHO "$DPKG --get-selections | $AWK '!/deinstall|purge|hold/'|$CUT -f1 | $TR '\n' ' '" >> $LOG
$DPKG --get-selections | $AWK '!/deinstall|purge|hold/'|$CUT -f1 |$TR '\n' ' ' >> $LOG 2>&1
fi
|
Richtig:
| if [ $PACKAGES -eq 1 ] && [ -z "$FROMSSH" ]; then
$ECHO -e "$DPKG --get-selections | $AWK '!/deinstall|purge|hold/'|$CUT -f1 | $TR '\n' ' '" >> $LOG
$DPKG --get-selections | $AWK '!/deinstall|purge|hold/'|$CUT -f1 |$TR '\n' ' ' >> $LOG 2>&1
fi
|
die Änderung ist das $ECHO -e , die das \n am Ende auch tatsächlich ausführt.