uname
Anmeldungsdatum: 28. März 2007
Beiträge: 6030
Wohnort: 127.0.0.1
|
Hallo, vielleicht kennt der eine oder andere das Script Skripte/Backup mit RSYNC welches ich mit der Hilfe einiger anderer Personen mal zusammengehackt hatte. Ich habe es nun mal vollkommen überarbeitet und benötige mal ein paar Betatester, bitte vorher Backup machen 😉 Vorteil ist, dass das Script nun inkrementell per SSH in zwei Richtungen arbeiten kann. Also Client zu einem Backupserver (TOSSH) oder der Server bezieht die Daten von einem Client (FROMSSH). Das Logdaten-Rotieren musste ich leider aufgrund der zwei Richtungen vereinfachen. Wer monatlich rotierende Logdaten haben möchte kann MONTHROTATE setzen und das Datum ist nicht JJMMTT sondern TT, wodurch nach einem Monat (hoffentlich) alte Backups überschrieben werden. Evtl. braucht es weitere rsync-Parameter.
Das mit den Paketlisten hat mir auch gar nicht in der alten Form gefallen. Wer diese weiterhin haben möchte kann PACKAGES setzen und bekommt die Listen mit ins Logfile gemüllt, welches man sich mit MAILREC weiterhin zuschicken lassen kann.
Einige Anwenderfehler (z.B. gleichzeitiges Setzen von TOSSH und FROMSSH werden abgefangen), Mountpoints bei TOSSH bzw. Packages bei FROMSSH sind sinnlos, werden jedoch nicht abgefangen. Viel Spaß beim Testen. Verbeserungsvorschläge bitte hier im Thread. Danke. #!/bin/bash
# Simple backup with rsync
# local-mode, tossh-mode, fromssh-mode
# sources and target MUST end WITH slash
SOURCES="/root/ /etc/ /home/"
TARGET="/usr/local/backup/"
LOG="/root/new.log"
MONTHROTATE=1
RSYNCCONF="--delete"
#MAILREC="user@localhost"
#MOUNTPOINT="/daten"
#PACKAGES=1
#SSHUSER="root"
#SSHPORT=22
#FROMSSH="clientsystem"
#TOSSH="backupserver"
### do not edit ###
MOUNT="/bin/mount"
FGREP="/bin/fgrep"
SSH="/usr/bin/ssh"
RSYNC="/usr/bin/rsync"
LN="/bin/ln"
ECHO="/bin/echo"
DATE="/bin/date"
RM="/bin/rm"
DPKG="/usr/bin/dpkg"
AWK="/usr/bin/awk"
MUTT="/usr/bin/mutt"
LAST="last"
INC="--link-dest=../$LAST"
$DATE > $LOG
MOUNTED=$($MOUNT | $FGREP "$MOUNTPOINT");
if [ -z "$MOUNTPOINT" ] || [ -n "$MOUNTED" ]; then
if [ $MONTHROTATE ]; then
TODAY=$($DATE +%d)
else
TODAY=$($DATE +%y%m%d)
fi
if [ "$SSHUSER" ] && [ "$SSHPORT" ]; then
S="$SSH -p $SSHPORT -l $SSHUSER";
fi
for SOURCE in $($ECHO $SOURCES)
do
if [ "$SSHUSER" ] && [ "$SSHPORT" ]; then
if [ "$FROMSSH" ] && [ -z "$TOSSH" ]; then
$ECHO "$RSYNC -e \"$S\" -avR $FROMSSH:$SOURCE $RSYNCONF $TARGET$TODAY $INC" >> $LOG
$RSYNC -e "$S" -avR $FROMSSH:$SOURCE $RSYNCCONF $TARGET$TODAY $INC >> $LOG 2>> $LOG
else
if [ "TOSSH" ] && [ -z "$FROMSSH" ]; then
$ECHO "$RSYNC -e \"$S\" -avR $SOURCE $RSYNCCONF $TOSSH:$TARGET$TODAY $INC " >> $LOG
$RSYNC -e "$S" -avR $SOURCE $RSYNCCONF $TOSSH:$TARGET$TODAY $INC >> $LOG 2>> $LOG
fi
fi
else
$ECHO "$RSYNC -avR $SOURCE $RSYNCCONF $INC $TARGET$TODAY" >> $LOG 2>> $LOG;
$RSYNC -avR $SOURCE $RSYNCCONF $INC $TARGET$TODAY >> $LOG 2>> $LOG
fi
done
if [ "$SSHUSER" ] && [ "$SSHPORT" ] && [ "$TOSSH" ] && [ -z "$FROMSSH" ]; then
$ECHO "$SSH -p $SSHPORT -l $SSHUSER $TOSSH $LN -nsf $TARGET$TODAY $TARGET$LAST" >> $LOG
$SSH -p $SSHPORT -l $SSHUSER $TOSSH "$LN -nsf $TARGET$TODAY $TARGET$LAST" >> $LOG 2>> $LOG
else
echo "$LN -nsf $TARGET$TODAY $TARGET$LAST" >> $LOG
$LN -nsf $TARGET$TODAY $TARGET$LAST >> $LOG 2>> $LOG
if [ -n "$PACKAGES" ]; then
$ECHO "$DPKG --get-selections | $AWK '!/deinstall|purge|hold/'" >> $LOG
$DPKG --get-selections | $AWK '!/deinstall|purge|hold/' >> $LOG 2>> $LOG
fi
fi
$DATE >> $LOG
else
$ECHO "$MOUNTPOINT not mounted" >> $LOG
fi
if [ -n "$MAILREC" ];then
$ECHO -e 'Backup is finished!\n'$($DATE) | $MUTT -s "Backup" -a $LOG -- $MAILREC
fi
|
busfahrer
Anmeldungsdatum: 9. April 2007
Beiträge: 3052
|
Hallo ich hab vom Bash-Skripten ja eigentlich keine Ahnung, aber kann es sein das dir hier if [ "TOSSH" ] && [ -z "$FROMSSH" ]; then vor "TOSSH" ein $ verloren gegangen ist ☺ Gruß...busfahrer
|
uname
(Themenstarter)
Anmeldungsdatum: 28. März 2007
Beiträge: 6030
Wohnort: 127.0.0.1
|
Ok, habe ich geändert und noch etwas mehr: #!/bin/bash
# Simple backup with rsync
# local-mode, tossh-mode, fromssh-mode
# sources and target MUST end WITH slash
SOURCES="/root/ /etc/ /home/"
TARGET="/usr/local/backup/"
LOG="/root/new.log"
MONTHROTATE=1
RSYNCCONF="--delete"
#MAILREC="user@localhost"
#MOUNTPOINT="/daten"
#PACKAGES=1
#SSHUSER="root"
#SSHPORT=22
#FROMSSH="clientsystem"
#TOSSH="backupserver"
### do not edit ###
MOUNT="/bin/mount"
FGREP="/bin/fgrep"
SSH="/usr/bin/ssh"
RSYNC="/usr/bin/rsync"
LN="/bin/ln"
ECHO="/bin/echo"
DATE="/bin/date"
RM="/bin/rm"
DPKG="/usr/bin/dpkg"
AWK="/usr/bin/awk"
MAIL="/usr/bin/mail"
LAST="last"
INC="--link-dest=../$LAST"
$DATE > $LOG
MOUNTED=$($MOUNT | $FGREP "$MOUNTPOINT");
if [ -z "$MOUNTPOINT" ] || [ -n "$MOUNTED" ]; then
if [ $LOGROTATE ]; then
TODAY=$($DATE +%d)
else
TODAY=$($DATE +%y%m%d)
fi
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 $RSYNCONF $TARGET$TODAY $INC" >> $LOG
$RSYNC -e "$S" -avR $FROMSSH:$SOURCE $RSYNCCONF $TARGET$TODAY $INC >> $LOG 2>> $LOG
fi
if [ "$S" ] && [ "$TOSSH" ] && [ -z "$FROMSSH" ]; then
$ECHO "$RSYNC -e \"$S\" -avR $SOURCE $RSYNCCONF $TOSSH:$TARGET$TODAY $INC " >> $LOG
$RSYNC -e "$S" -avR $SOURCE $RSYNCCONF $TOSSH:$TARGET$TODAY $INC >> $LOG 2>> $LOG
fi
if [ -z "$S" ]; then
$ECHO "$RSYNC -avR $SOURCE $RSYNCCONF $INC $TARGET$TODAY" >> $LOG 2>> $LOG;
$RSYNC -avR $SOURCE $RSYNCCONF $INC $TARGET$TODAY >> $LOG 2>> $LOG
fi
done
if [ "$S" ] && [ "$TOSSH" ] && [ -z "$FROMSSH" ]; then
$ECHO "$SSH -p $SSHPORT -l $SSHUSER $TOSSH $LN -nsf $TARGET$TODAY $TARGET$LAST" >> $LOG
$SSH -p $SSHPORT -l $SSHUSER $TOSSH "$LN -nsf $TARGET$TODAY $TARGET$LAST" >> $LOG 2>> $LOG
if [ -n "$PACKAGES" ]; then
$ECHO "$DPKG --get-selections | $AWK '!/deinstall|purge|hold/'" >> $LOG
$DPKG --get-selections | $AWK '!/deinstall|purge|hold/' >> $LOG 2>> $LOG
fi
fi
if ( [ "$S" ] && [ "$FROMSSH" ] && [ -z "$TOSSH" ] ) || ( [ -z "$S" ] ); then
$ECHO "$LN -nsf $TARGET$TODAY $TARGET$LAST" >> $LOG
$LN -nsf $TARGET$TODAY $TARGET$LAST >> $LOG 2>> $LOG
if [ -n "$PACKAGES" ]; then
$ECHO "$DPKG --get-selections | $AWK '!/deinstall|purge|hold/'" >> $LOG
$DPKG --get-selections | $AWK '!/deinstall|purge|hold/' >> $LOG 2>> $LOG
fi
fi
$DATE >> $LOG
else
$ECHO "$MOUNTPOINT not mounted" >> $LOG
fi
if [ -n "$MAILREC" ];then
$MAIL -s Backup $MAILREC < $LOG
fi
|
uname
(Themenstarter)
Anmeldungsdatum: 28. März 2007
Beiträge: 6030
Wohnort: 127.0.0.1
|
Hier die neue Version. #!/bin/bash
# Simple backup with rsync
# local-mode, tossh-mode, fromssh-mode
# sources and target MUST end WITH slash
SOURCES="/root/ /etc/ /home/"
TARGET="/usr/local/backup/"
LOG="/root/new.log"
MONTHROTATE=1
RSYNCCONF="--delete"
#MAILREC="user@localhost"
MAILSUBJECT="Backup"
#MOUNTPOINT="/daten"
#PACKAGES=1
#SSHUSER="root"
#SSHPORT=22
#FROMSSH="clientsystem"
#TOSSH="backupserver"
### do not edit ###
MOUNT="/bin/mount"
FGREP="/bin/fgrep"
SSH="/usr/bin/ssh"
RSYNC="/usr/bin/rsync"
LN="/bin/ln"
ECHO="/bin/echo"
DATE="/bin/date"
RM="/bin/rm"
DPKG="/usr/bin/dpkg"
AWK="/usr/bin/awk"
MAIL="/usr/bin/mail"
LAST="last"
INC="--link-dest=../$LAST"
$DATE > $LOG
MOUNTED=$($MOUNT | $FGREP "$MOUNTPOINT");
if [ -z "$MOUNTPOINT" ] || [ -n "$MOUNTED" ]; then
if [ $LOGROTATE ]; then
TODAY=$($DATE +%d)
else
TODAY=$($DATE +%y%m%d)
fi
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 $RSYNCONF $TARGET$TODAY $INC" >> $LOG
$RSYNC -e "$S" -avR $FROMSSH:$SOURCE $RSYNCCONF $TARGET$TODAY $INC >> $LOG 2>> $LOG
fi
if [ "$S" ] && [ "$TOSSH" ] && [ -z "$FROMSSH" ]; then
$ECHO "$RSYNC -e \"$S\" -avR $SOURCE $RSYNCCONF $TOSSH:$TARGET$TODAY $INC " >> $LOG
$RSYNC -e "$S" -avR $SOURCE $RSYNCCONF $TOSSH:$TARGET$TODAY $INC >> $LOG 2>> $LOG
fi
if [ -z "$S" ]; then
$ECHO "$RSYNC -avR $SOURCE $RSYNCCONF $INC $TARGET$TODAY" >> $LOG 2>> $LOG;
$RSYNC -avR $SOURCE $RSYNCCONF $INC $TARGET$TODAY >> $LOG 2>> $LOG
fi
done
if [ "$S" ] && [ "$TOSSH" ] && [ -z "$FROMSSH" ]; then
$ECHO "$SSH -p $SSHPORT -l $SSHUSER $TOSSH $LN -nsf $TARGET$TODAY $TARGET$LAST" >> $LOG
$SSH -p $SSHPORT -l $SSHUSER $TOSSH "$LN -nsf $TARGET$TODAY $TARGET$LAST" >> $LOG 2>> $LOG
if [ -n "$PACKAGES" ]; then
$ECHO "$DPKG --get-selections | $AWK '!/deinstall|purge|hold/'" >> $LOG
$DPKG --get-selections | $AWK '!/deinstall|purge|hold/' >> $LOG 2>> $LOG
fi
fi
if ( [ "$S" ] && [ "$FROMSSH" ] && [ -z "$TOSSH" ] ) || ( [ -z "$S" ] ); then
$ECHO "$LN -nsf $TARGET$TODAY $TARGET$LAST" >> $LOG
$LN -nsf $TARGET$TODAY $TARGET$LAST >> $LOG 2>> $LOG
if [ -n "$PACKAGES" ]; then
$ECHO "$DPKG --get-selections | $AWK '!/deinstall|purge|hold/'" >> $LOG
$DPKG --get-selections | $AWK '!/deinstall|purge|hold/' >> $LOG 2>> $LOG
fi
fi
$DATE >> $LOG
else
$ECHO "$MOUNTPOINT not mounted" >> $LOG
fi
if [ -n "$MAILREC" ];then
$MAIL -s "$MAILSUBJECT" $MAILREC < $LOG
fi
|
compiopa
Anmeldungsdatum: 18. November 2009
Beiträge: Zähle...
Wohnort: Franken
|
uname schrieb: Hier die neue Version.
if [ "$S" ] && [ "$FROMSSH" ] && [ -z "$TOSSH" ]; then
$ECHO "$RSYNC -e \"$S\" -avR $FROMSSH:$SOURCE $RSYNCONF $TARGET$TODAY $INC" >> $LOG
$RSYNC -e "$S" -avR $FROMSSH:$SOURCE $RSYNCCONF $TARGET$TODAY $INC >> $LOG 2>> $LOG
fi
In der $ECHO Zeile steht $RSYNCONF statt $RSYNCCONF. Gruß compiopa
|
uname
(Themenstarter)
Anmeldungsdatum: 28. März 2007
Beiträge: 6030
Wohnort: 127.0.0.1
|
Danke. Ist wohl nicht mein Tag.
Habe gleich ein neues Feature eingebaut. Die Datei erkennt selbst wie sie heisst und benennt z.B. wenn Aufruf "/root/backup.sh" die Logdatei mit "/root/backup.sh.log" sowie die EMail mit "Backup /root/backup.sh.log". Hasse immer diese ganzen Parameter beim testen zu ändern. Gruß und viel Spaß mit dem Script. Auf den nächsten Fehler. #!/bin/bash
# Simple backup with rsync
# local-mode, tossh-mode, fromssh-mode
# sources and target MUST end WITH slash
SOURCES="/root/ /etc/ /home/"
TARGET="/usr/local/backup/"
MONTHROTATE=1
RSYNCCONF="--delete"
LOG=$0.log
MAILREC="user@localhost"
MAILSUBJECT="Backup $LOG"
#MOUNTPOINT="/daten"
PACKAGES=1
#SSHUSER="root"
#SSHPORT=22
#FROMSSH="clientsystem"
#TOSSH="backupserver"
### do not edit ###
MOUNT="/bin/mount"
FGREP="/bin/fgrep"
SSH="/usr/bin/ssh"
RSYNC="/usr/bin/rsync"
LN="/bin/ln"
ECHO="/bin/echo"
DATE="/bin/date"
RM="/bin/rm"
DPKG="/usr/bin/dpkg"
AWK="/usr/bin/awk"
MAIL="/usr/bin/mail"
LAST="last"
INC="--link-dest=../$LAST"
$DATE > $LOG
MOUNTED=$($MOUNT | $FGREP "$MOUNTPOINT");
if [ -z "$MOUNTPOINT" ] || [ -n "$MOUNTED" ]; then
if [ $LOGROTATE ]; then
TODAY=$($DATE +%d)
else
TODAY=$($DATE +%y%m%d)
fi
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$TODAY $INC" >> $LOG
$RSYNC -e "$S" -avR $FROMSSH:$SOURCE $RSYNCCONF $TARGET$TODAY $INC >> $LOG 2>> $LOG
fi
if [ "$S" ] && [ "$TOSSH" ] && [ -z "$FROMSSH" ]; then
$ECHO "$RSYNC -e \"$S\" -avR $SOURCE $RSYNCCONF $TOSSH:$TARGET$TODAY $INC " >> $LOG
$RSYNC -e "$S" -avR $SOURCE $RSYNCCONF $TOSSH:$TARGET$TODAY $INC >> $LOG 2>> $LOG
fi
if [ -z "$S" ]; then
$ECHO "$RSYNC -avR $SOURCE $RSYNCCONF $INC $TARGET$TODAY" >> $LOG 2>> $LOG;
$RSYNC -avR $SOURCE $RSYNCCONF $INC $TARGET$TODAY >> $LOG 2>> $LOG
fi
done
if [ "$S" ] && [ "$TOSSH" ] && [ -z "$FROMSSH" ]; then
$ECHO "$SSH -p $SSHPORT -l $SSHUSER $TOSSH $LN -nsf $TARGET$TODAY $TARGET$LAST" >> $LOG
$SSH -p $SSHPORT -l $SSHUSER $TOSSH "$LN -nsf $TARGET$TODAY $TARGET$LAST" >> $LOG 2>> $LOG
if [ -n "$PACKAGES" ]; then
$ECHO "$DPKG --get-selections | $AWK '!/deinstall|purge|hold/'" >> $LOG
$DPKG --get-selections | $AWK '!/deinstall|purge|hold/' >> $LOG 2>> $LOG
fi
fi
if ( [ "$S" ] && [ "$FROMSSH" ] && [ -z "$TOSSH" ] ) || ( [ -z "$S" ] ); then
$ECHO "$LN -nsf $TARGET$TODAY $TARGET$LAST" >> $LOG
$LN -nsf $TARGET$TODAY $TARGET$LAST >> $LOG 2>> $LOG
if [ -n "$PACKAGES" ]; then
$ECHO "$DPKG --get-selections | $AWK '!/deinstall|purge|hold/'" >> $LOG
$DPKG --get-selections | $AWK '!/deinstall|purge|hold/' >> $LOG 2>> $LOG
fi
fi
$DATE >> $LOG
else
$ECHO "$MOUNTPOINT not mounted" >> $LOG
fi
if [ -n "$MAILREC" ];then
$MAIL -s "$MAILSUBJECT" $MAILREC < $LOG
fi
|
uname
(Themenstarter)
Anmeldungsdatum: 28. März 2007
Beiträge: 6030
Wohnort: 127.0.0.1
|
Neu sortiert: #!/bin/bash
# Simple backup with rsync
# local-mode, tossh-mode, fromssh-mode
# sources and target MUST end WITH slash
SOURCES="/root/ /etc/ /home/"
TARGET="/usr/local/backup/"
RSYNCCONF="--delete"
#MOUNTPOINT="/daten"
#PACKAGES=1
#MONTHROTATE=1
#MAILREC="user@localhost"
#SSHUSER="root"
#SSHPORT=22
#FROMSSH="clientsystem"
#TOSSH="backupserver"
### do not edit ###
LOG=$0.log
MAILSUBJECT="Backup $LOG"
MOUNT="/bin/mount"
FGREP="/bin/fgrep"
SSH="/usr/bin/ssh"
RSYNC="/usr/bin/rsync"
LN="/bin/ln"
ECHO="/bin/echo"
DATE="/bin/date"
RM="/bin/rm"
DPKG="/usr/bin/dpkg"
AWK="/usr/bin/awk"
MAIL="/usr/bin/mail"
LAST="last"
INC="--link-dest=../$LAST"
$DATE > $LOG
MOUNTED=$($MOUNT | $FGREP "$MOUNTPOINT");
if [ -z "$MOUNTPOINT" ] || [ -n "$MOUNTED" ]; then
if [ $LOGROTATE ]; then
TODAY=$($DATE +%d)
else
TODAY=$($DATE +%y%m%d)
fi
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$TODAY $INC" >> $LOG
$RSYNC -e "$S" -avR $FROMSSH:$SOURCE $RSYNCCONF $TARGET$TODAY $INC >> $LOG 2>> $LOG
fi
if [ "$S" ] && [ "$TOSSH" ] && [ -z "$FROMSSH" ]; then
$ECHO "$RSYNC -e \"$S\" -avR $SOURCE $RSYNCCONF $TOSSH:$TARGET$TODAY $INC " >> $LOG
$RSYNC -e "$S" -avR $SOURCE $RSYNCCONF $TOSSH:$TARGET$TODAY $INC >> $LOG 2>> $LOG
fi
if [ -z "$S" ]; then
$ECHO "$RSYNC -avR $SOURCE $RSYNCCONF $INC $TARGET$TODAY" >> $LOG 2>> $LOG;
$RSYNC -avR $SOURCE $RSYNCCONF $INC $TARGET$TODAY >> $LOG 2>> $LOG
fi
done
if [ "$S" ] && [ "$TOSSH" ] && [ -z "$FROMSSH" ]; then
$ECHO "$SSH -p $SSHPORT -l $SSHUSER $TOSSH $LN -nsf $TARGET$TODAY $TARGET$LAST" >> $LOG
$SSH -p $SSHPORT -l $SSHUSER $TOSSH "$LN -nsf $TARGET$TODAY $TARGET$LAST" >> $LOG 2>> $LOG
if [ -n "$PACKAGES" ]; then
$ECHO "$DPKG --get-selections | $AWK '!/deinstall|purge|hold/'" >> $LOG
$DPKG --get-selections | $AWK '!/deinstall|purge|hold/' >> $LOG 2>> $LOG
fi
fi
if ( [ "$S" ] && [ "$FROMSSH" ] && [ -z "$TOSSH" ] ) || ( [ -z "$S" ] ); then
$ECHO "$LN -nsf $TARGET$TODAY $TARGET$LAST" >> $LOG
$LN -nsf $TARGET$TODAY $TARGET$LAST >> $LOG 2>> $LOG
if [ -n "$PACKAGES" ]; then
$ECHO "$DPKG --get-selections | $AWK '!/deinstall|purge|hold/'" >> $LOG
$DPKG --get-selections | $AWK '!/deinstall|purge|hold/' >> $LOG 2>> $LOG
fi
fi
$DATE >> $LOG
else
$ECHO "$MOUNTPOINT not mounted" >> $LOG
fi
if [ -n "$MAILREC" ];then
$MAIL -s "$MAILSUBJECT" $MAILREC < $LOG
fi
|
compiopa
Anmeldungsdatum: 18. November 2009
Beiträge: 68
Wohnort: Franken
|
Hallo uname, da beißt sich noch was... Neu sortiert:
#MONTHROTATE=1
if [ $LOGROTATE ]; then
Gruß compiopa
|
uname
(Themenstarter)
Anmeldungsdatum: 28. März 2007
Beiträge: 6030
Wohnort: 127.0.0.1
|
Danke. #!/bin/bash
# Simple backup with rsync
# local-mode, tossh-mode, fromssh-mode
SOURCES="/root/ /etc/ /home/"
TARGET="/usr/local/backup/"
RSYNCCONF="--delete"
#MOUNTPOINT="/daten"
#PACKAGES=1
#MONTHROTATE=1
#MAILREC="user@localhost"
#SSHUSER="root"
#SSHPORT=22
#FROMSSH="clientsystem"
#TOSSH="backupserver"
### do not edit ###
LOG=$0.log
MAILSUBJECT="Backup $LOG"
MOUNT="/bin/mount"
FGREP="/bin/fgrep"
SSH="/usr/bin/ssh"
RSYNC="/usr/bin/rsync"
LN="/bin/ln"
ECHO="/bin/echo"
DATE="/bin/date"
RM="/bin/rm"
DPKG="/usr/bin/dpkg"
AWK="/usr/bin/awk"
MAIL="/usr/bin/mail"
LAST="last"
INC="--link-dest=../$LAST"
$DATE > $LOG
MOUNTED=$($MOUNT | $FGREP "$MOUNTPOINT");
if [ -z "$MOUNTPOINT" ] || [ -n "$MOUNTED" ]; then
if [ $MONTHROTATE ]; then
TODAY=$($DATE +%d)
else
TODAY=$($DATE +%y%m%d)
fi
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$TODAY $INC" >> $LOG
$RSYNC -e "$S" -avR $FROMSSH:$SOURCE $RSYNCCONF $TARGET$TODAY $INC >> $LOG 2>> $LOG
fi
if [ "$S" ] && [ "$TOSSH" ] && [ -z "$FROMSSH" ]; then
$ECHO "$RSYNC -e \"$S\" -avR $SOURCE $RSYNCCONF $TOSSH:$TARGET$TODAY $INC " >> $LOG
$RSYNC -e "$S" -avR $SOURCE $RSYNCCONF $TOSSH:$TARGET$TODAY $INC >> $LOG 2>> $LOG
fi
if [ -z "$S" ]; then
$ECHO "$RSYNC -avR $SOURCE $RSYNCCONF $INC $TARGET$TODAY" >> $LOG 2>> $LOG;
$RSYNC -avR $SOURCE $RSYNCCONF $INC $TARGET$TODAY >> $LOG 2>> $LOG
fi
done
if [ "$S" ] && [ "$TOSSH" ] && [ -z "$FROMSSH" ]; then
$ECHO "$SSH -p $SSHPORT -l $SSHUSER $TOSSH $LN -nsf $TARGET$TODAY $TARGET$LAST" >> $LOG
$SSH -p $SSHPORT -l $SSHUSER $TOSSH "$LN -nsf $TARGET$TODAY $TARGET$LAST" >> $LOG 2>> $LOG
if [ -n "$PACKAGES" ]; then
$ECHO "$DPKG --get-selections | $AWK '!/deinstall|purge|hold/'" >> $LOG
$DPKG --get-selections | $AWK '!/deinstall|purge|hold/' >> $LOG 2>> $LOG
fi
fi
if ( [ "$S" ] && [ "$FROMSSH" ] && [ -z "$TOSSH" ] ) || ( [ -z "$S" ] ); then
$ECHO "$LN -nsf $TARGET$TODAY $TARGET$LAST" >> $LOG
$LN -nsf $TARGET$TODAY $TARGET$LAST >> $LOG 2>> $LOG
if [ -n "$PACKAGES" ]; then
$ECHO "$DPKG --get-selections | $AWK '!/deinstall|purge|hold/'" >> $LOG
$DPKG --get-selections | $AWK '!/deinstall|purge|hold/' >> $LOG 2>> $LOG
fi
fi
$DATE >> $LOG
else
$ECHO "$MOUNTPOINT not mounted" >> $LOG
fi
if [ -n "$MAILREC" ];then
$MAIL -s "$MAILSUBJECT" $MAILREC < $LOG
fi
|
kaputtnik
Anmeldungsdatum: 31. Dezember 2007
Beiträge: 9245
|
Hi, habe den Thread mal ins Forum "Projekte" verschoben, weil es nicht direkt etwas mit dem Wiki-Artikel zu tun hat. Alternativ wäre eine Verschiebung an den Thread zum Wiki-Artikel Skripte/Backup mit RSYNC. Aber da uname nicht in den Thread gepostet hat, dachte ich, das ein extra thread von Ihm gewollt war. Wie dem auch sei, in diesem Forum finden sich sicherlich mehr kompetente Leute als im Wiki-Forum. Gruß kaputtnik
|
Bloedsack
Anmeldungsdatum: 24. November 2010
Beiträge: Zähle...
|
Hi, Ich bastle auch gerade an so etwas und Frage mich wie kann ich den MOUNTPOINT auf einem entfernten Rechner abfragen und wenn nicht vorhanden mounten und dann die Sicherung durchführen?
Wäre schön wenn Ihr mir da helfen könntet. Viele Grüße.
|
uname
(Themenstarter)
Anmeldungsdatum: 28. März 2007
Beiträge: 6030
Wohnort: 127.0.0.1
|
... ich den MOUNTPOINT auf einem entfernten Rechner abfragen und wenn nicht vorhanden mounten ...
Ob das wirklich Sinn macht kann ich nicht bewerten. Aber folgende Zeile könntest du dafür nutzen. Musst dann jedoch für jeden Befehl (nicht wie hier "ls -nsf") etwas eintragen. Die Befehle selbst stehen etwas weiter oben im Script, musst sie aber auch anpassen. Denk daran SSH-Keys auszutauschen. Macht kein Spaß für jeden Befehl das Passwort einzugeben. $SSH -p $SSHPORT -l $SSHUSER $TOSSH "$LN -nsf $TARGET$TODAY $TARGET$LAST" >> $LOG 2>> $LOG
|
Bloedsack
Anmeldungsdatum: 24. November 2010
Beiträge: 4
|
Na alles klar! Ich teste mal damit und melde mich dann wieder.
Die Keys sind auf dem System hinterlegt und der User der sein Backup machen möchte hat auto Zugriff.
Dein Skript liest ja aus den "$LOG 2>> $LOG" das Ziel aus aber geht das dann auch mit dem mounten auf dem entfernten Rechner.
Vieleicht denke ich auch gerade viel zu wild... Hättest Du vieleicht ein Beispiel wie Du das angehen würdest? Gruß.
|
uname
(Themenstarter)
Anmeldungsdatum: 28. März 2007
Beiträge: 6030
Wohnort: 127.0.0.1
|
Das Log wird natürlich jeweils lokal geschrieben. Mit ">>" wird die Ausgabe und mit "2>>" wird die Fehlermeldung am Log angehangen.
|
noxonium
Anmeldungsdatum: 12. April 2010
Beiträge: Zähle...
|
Hallo uname, danke für das Skript und den Tip! Gibt es denn die Möglichkeit, dein Skript mit Hilfe eines Keyfiles zu automatisieren (damit man es von Cron aufrufen lassen kann)? Ohne Keyfile fragt er mich 3 x nach meinem SSH-Passwort. Oder habe ich irgendetwas übersehen?
|