Nur-Ein-Blogger
Anmeldungsdatum: 4. April 2011
Beiträge: 146
|
Hey leute, ich hänge hier etwas fest. Ich bin Im Ordner
/etc/nginx/html Darin sind $x Ordner.
Diese liste ich mit einer Schleife auf. Ausgenommen werden Ordner $Y. Also z.B. "backups" So, die var "$folders" enthält alle Ordner die Archiviert werden sollen. Rekursiv. Allerdings will ich das Archiv, welches entsteht direkt in $BACKUP_PATH/FTPBACKUP packen. Lange Rede, kurzer Sinn. So sieht das Script aus. Funktionuiert auch, nur das er das Archiv im Webfolder packt.
| cd $PATH_TO_WEBFOLDER
folders=`for i in $(ls -d */ | grep -Ev "(backups)"); do echo ${i%%/}; done`
for ftp in $folders; do
tar -cvvzf $ftp-$datum.tar.gz *
done
|
Das Archiv soll aber nach "$BACKUP_PATH/FTPBACKUP/" gepackt werden. Kann mir da wer helfen?
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12829
|
Nur-Ein-Blogger schrieb:
Ich bin Im Ordner
/etc/nginx/html Darin sind $x Ordner.
Diese liste ich mit einer Schleife auf. Ausgenommen werden Ordner $Y. Also z.B. "backups" So, die var "$folders" enthält alle Ordner die Archiviert werden sollen. Rekursiv.
Nee, es ist nur eine Ebene von Ordnern enthalten.
Allerdings will ich das Archiv, welches entsteht direkt in $BACKUP_PATH/FTPBACKUP packen. Lange Rede, kurzer Sinn. So sieht das Script aus. Funktionuiert auch, nur das er das Archiv im Webfolder packt.
Mir ist im Moment nicht ganz klar, was Dein Ziel ist.
| cd $PATH_TO_WEBFOLDER
folders=`for i in $(ls -d */ | grep -Ev "(backups)"); do echo ${i%%/}; done`
for ftp in $folders; do
tar -cvvzf $ftp-$datum.tar.gz *
done
|
Es gibt da ein paar Probleme, z.B. Die Variable ftp wird gar nicht benutzt, um den Inhalt des Archives zu bestimmen, d.h. alles landet in allen Archiven. Du quotest nicht Ausgabe von ls zu parsen ist immer eine schlechte Idee (siehe Links auf meiner Profilseite).
Das Archiv soll aber nach "$BACKUP_PATH/FTPBACKUP/" gepackt werden. Kann mir da wer helfen?
Fangen wir noch mal am Anfang an: was genau willst Du erreichen? Ich vermute mal: Du hast mehrere Ordner, die Du jeweils in ein Archiv sichern willst. Die Ordner liegen unter "$PATH_TO_WEBFOLDER" Die Backups sollen nach "$BACKUP_PATH/FTPBACKUP"
Ich würde das ungefähr so machen: 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 | #!/bin/sh
path_to_webfolder=/etc/nginx/html
backup_path=/tmp # wo auch immer
# exit on error
set -e
# make absolute and add dir
backup_path="$(readlink -f "$backup_path")/FTPBACKUP"
cd "$path_to_webfolder"
datum=$(date) # whatever format
for d in */; do
d="${d%/}" # strip trailing slash
if [ -n "${d##*(backup)*}" ]; then
tar cvzf "$backup_path/$d-$datum.tgz" "$d"
fi
done
|
|
TomTobin
Anmeldungsdatum: 24. August 2007
Beiträge: 3094
|
Hallo Nur-Ein-Blogger,
So sieht das Script aus. Funktionuiert auch,
Glaub' ich Dir nicht 😈 Ja, das Skript tut was aber ich kann mir nicht vorstellen dass es in deinem Sinne funktioniert 😉 was soll denn die Option vv bewirken? du erzeugst zwar schön für jedes Verzeichnis eine Archiv-Datei aber ich denke mal da steht in allen das gleiche drin 😬 Willst Du nun eine einzige Archiv-Datei mit allen drin oder doch eher für jeden Ordner eine separate?
Gruß Tom Edit: mal wieder zu langsam 😇
|
Nur-Ein-Blogger
(Themenstarter)
Anmeldungsdatum: 4. April 2011
Beiträge: 146
|
:s Ja, ich hatte mich schon gewundert, wieso ein 700mb Ordner 3 GB als Archiv hatte :s Danke für die Beiträge! Genau das habe ich gesucht. Ordner A x Ordner
also
OrdnerA/EINS
OrdnerA/ZWEI
OrdnerA/DREI
OrdeerA/backups Jeder Ordner in "OrderA" soll in ein seperates Archiv nach
OrdnerB/EINS.tgz
OrdnerB/ZWEI.tgz
OrdnerB/DREI.tgz -vv bewirkt eine detaillierte Ausgabe, die in log files landet. Also z.B. auch die Schreibrechte der Dateien etc. Werde mir das schritt für Schritt anschauen und aus dem Fehler lernen. Danke euch!
|
TomTobin
Anmeldungsdatum: 24. August 2007
Beiträge: 3094
|
-vv bewirkt eine detaillierte Ausgabe, die in log files landet. Also z.B. auch die Schreibrechte der Dateien etc.
stimmt 😲 - wieder was gelernt ☺
|
Nur-Ein-Blogger
(Themenstarter)
Anmeldungsdatum: 4. April 2011
Beiträge: 146
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 | PATH_TO_WEBFOLDER="/etc/nginx/html"
datum=$(date +"%d-%m-%Y")
BACKUP_PATH="/etc/nginx/html/backups/$datum"
# make absolute and add dir
backup_path="$(readlink -f "$backup_path")/FTPBACKUP"
cd $PATH_TO_WEBFOLDER
for d in */; do
d="${d%/}" # strip trailing slash
if [ -n "${d##*(backup)*}" ]; then
tar cvvzf "$backup_path/$d-$datum.tgz" "$d"
fi
done
|
Das klappt leider auch nicht. Er bricht ab. Ohne Fehlermeldung etc. Edit:
Ich habe mal weiter geforscht und bin in die Richtung gekommen:
| cd $PATH_TO_WEBFOLDER
for dir in $PATH_TO_WEBFOLDER/*/
do
base=$(basename "$dir")
tar -cvvzf $BACKUP_PATH/FTPBACKUP/$datum-$base.tar.gz $dir
done
|
Allerdings kann ich dann "backups" nicht ausschließen
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12829
|
Nur-Ein-Blogger schrieb: :s Ja, ich hatte mich schon gewundert, wieso ein 700mb Ordner 3 GB als Archiv hatte :s
😬
-vv bewirkt eine detaillierte Ausgabe, die in log files landet. Also z.B. auch die Schreibrechte der Dateien etc.
Das zweite "v" ist überflüssig, denn es macht keinen Unterschied: | $ diff -U3 <(tar cf - bin | tar tvf -) <(tar cf - bin | tar tvvf -)
$
|
Werde mir das schritt für Schritt anschauen und aus dem Fehler lernen. Danke euch!
Bitte.
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12829
|
Nur-Ein-Blogger schrieb: 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 | PATH_TO_WEBFOLDER="/etc/nginx/html"
datum=$(date +"%d-%m-%Y")
BACKUP_PATH="/etc/nginx/html/backups/$datum"
# make absolute and add dir
backup_path="$(readlink -f "$backup_path")/FTPBACKUP"
cd $PATH_TO_WEBFOLDER
for d in */; do
d="${d%/}" # strip trailing slash
if [ -n "${d##*(backup)*}" ]; then
tar cvvzf "$backup_path/$d-$datum.tgz" "$d"
fi
done
|
Das klappt leider auch nicht. Er bricht ab. Ohne Fehlermeldung etc.
Für es mal mit einem set -x am Anfang der Datei nach der Shebang-Zeile aus und poste die Ausgabe. Ich wüsste im Moment nicht, warum er abbrechen sollte, außer tar meldet einen Fehler.
Edit:
Ich habe mal weiter geforscht und bin in die Richtung gekommen:
| cd $PATH_TO_WEBFOLDER
for dir in $PATH_TO_WEBFOLDER/*/
do
base=$(basename "$dir")
tar -cvvzf $BACKUP_PATH/FTPBACKUP/$datum-$base.tar.gz $dir
done
|
Der $PATH_TO_WEBFOLDER/*/ ist aber überflüssig: Du hast ja bereits in das Verzeichnis gewechselt.
Allerdings kann ich dann "backups" nicht ausschließen
Kannst Du schon.
|
TomTobin
Anmeldungsdatum: 24. August 2007
Beiträge: 3094
|
Das zweite "v" ist überflüssig, denn es macht keinen Unterschied:
dachte ich auch erst aber ein Livetest zeigt einen deutlichen Unterschied. 😬 mit -v
DSC00549.JPG
mit -vv
-rw-r--r-- 1 tom tom 5732435 Jun 29 2016 DSC00549.JPG Gruß Tom
|
Nur-Ein-Blogger
(Themenstarter)
Anmeldungsdatum: 4. April 2011
Beiträge: 146
|
mit set x | + cd /etc/nginx/html
++ readlink -f ''
+ backup_path=/FTPBACKUP
root@mail:~#
|
Ohne:
| Start create FILE Backup.
root@mail:~#
|
echt komisch :/ Er gibt ja gar nix aus:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 | # make absolute and add dir
backup_path="$(readlink -f "$backup_path")/FTPBACKUP"
cd $PATH_TO_WEBFOLDER
g=1
for d in */; do
d="${d%/}" # strip trailing slash
echo $g
echo "$g"
$g=$g+1
echo "Hallo Welt!"
if [ -n "${d##*(backup)*}" ]; then
tar -cvvzf "$backup_path/FTPBACKUP/$d-$datum.tgz" "$d"
fi
done
|
Start create FILE Backup.
root@mail:~#
dachte ich auch erst aber ein Livetest zeigt einen deutlichen Unterschied.
Ja, finde es praktisch, wenn die Ausgabe in eine Log file geht im nachinein kann es doch hilfreich sein.
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12829
|
TomTobin schrieb: Das zweite "v" ist überflüssig, denn es macht keinen Unterschied:
dachte ich auch erst aber ein Livetest zeigt einen deutlichen Unterschied. 😬 mit -v
DSC00549.JPG
mit -vv
-rw-r--r-- 1 tom tom 5732435 Jun 29 2016 DSC00549.JPG
Auf was für einer Plattform hast Du das getestet? Bei mir ist das der Unterschied zwischen kein "v" und ein "v". Siehe den diff für ein "v" und zwei "v", den ich früher gemacht habe. Ich wiederhole das noch mal: 1
2
3
4
5
6
7
8
9
10
11
12
13
14 | $ mkdir -p foo/bar/baz
$ diff -U3 <(tar cf - foo | tar tf -) <(tar cf - foo | tar tvf -)
--- /dev/fd/63 2017-03-30 16:33:54.980670666 +0200
+++ /dev/fd/62 2017-03-30 16:33:54.980670666 +0200
@@ -1,3 +1,3 @@
-foo/
-foo/bar/
-foo/bar/baz/
+drwxrwxr-x robert/robert 0 2017-03-30 16:33 foo/
+drwxrwxr-x robert/robert 0 2017-03-30 16:33 foo/bar/
+drwxrwxr-x robert/robert 0 2017-03-30 16:33 foo/bar/baz/
$ diff -U3 <(tar cf - foo | tar tvf -) <(tar cf - foo | tar tvvf -)
$ diff -U3 <(tar cf - foo | tar tvf -) <(tar cf - foo | tar tvvvf -)
$
|
|
Nur-Ein-Blogger
(Themenstarter)
Anmeldungsdatum: 4. April 2011
Beiträge: 146
|
Debian 8 nutze ich zumindest.
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12829
|
Nur-Ein-Blogger schrieb: Debian 8 nutze ich zumindest.
Mein Fehler: Du hast Recht, ich habe mit tar t getestet. Bei tar c macht es den besagten Unterschied.
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12829
|
Nur-Ein-Blogger schrieb: mit set x
Es muss heißen set -x !
| + cd /etc/nginx/html
++ readlink -f ''
+ backup_path=/FTPBACKUP
root@mail:~#
|
Offensichtlich ist da mindestens eine Variable nicht gesetzt. Deshalb bricht readlink mit Fehler ab.
Ohne:
| Start create FILE Backup.
root@mail:~#
|
echt komisch :/
Das kann nicht sein, denn set -x ändert nichts an den normalen Ausgaben. Du musst da noch mehr geändert haben.
|
Nur-Ein-Blogger
(Themenstarter)
Anmeldungsdatum: 4. April 2011
Beiträge: 146
|
Dann muss ich gerade echt Blind sein, hier mal das komplette Backupscript:
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 | #!/bin/bash
# The perfect rootserver
# by shoujii | BoBBer446
# This is an standalone addonscript for
# https://github.com/shoujii/perfectrootserver
set -x!
##########################################################################
###################### DO NOT EDIT ANYTHING BELOW! #######################
##########################################################################
# Some nice colors
red() { echo "$(tput setaf 1)$*$(tput setaf 9)"; }
green() { echo "$(tput setaf 2)$*$(tput setaf 9)"; }
yellow() { echo "$(tput setaf 3)$*$(tput setaf 9)"; }
magenta() { echo "$(tput setaf 5)$*$(tput setaf 9)"; }
cyan() { echo "$(tput setaf 6)$*$(tput setaf 9)"; }
textb() { echo $(tput bold)${1}$(tput sgr0); }
greenb() { echo $(tput bold)$(tput setaf 2)${1}$(tput sgr0); }
redb() { echo $(tput bold)$(tput setaf 1)${1}$(tput sgr0); }
yellowb() { echo $(tput bold)$(tput setaf 3)${1}$(tput sgr0); }
pinkb() { echo $(tput bold)$(tput setaf 5)${1}$(tput sgr0); }
# Some nice variables
info="$(textb [INFO] -)"
warn="$(yellowb [WARN] -)"
error="$(redb [ERROR] -)"
fyi="$(pinkb [INFO] -)"
ok="$(greenb [OKAY] -)"
echo
echo
echo "$(date +"[%T]") | $(textb +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+)"
echo "$(date +"[%T]") | $(textb Very) $(textb secure) $(textb FTP) $(textb backup) $(textb script)"
echo "$(date +"[%T]") | $(textb +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+)"
echo
echo "$(date +"[%T]") | ${info} Welcome to the Perfect Rootserver installation!"
echo "$(date +"[%T]") | ${info} This script creates an Backup"
echo "$(date +"[%T]") | ${info} Please wait while the Script is create and Backup"
# --------------------------------------------------------------------------------------------------------------------------------------------------
# Variable deklarieren
datum=$(date +"%d-%m-%Y")
#Lese Db passwort aus und speichere es
#Todo: Explizites aufsuchen des 1. Treffers
PATH_TO_PASSWORDS="/root/credentials.txt"
PATH_TO_WEBFOLDER="/etc/nginx/html"
BACKUP_PATH="/etc/nginx/html/backups/$datum"
MYSQL_PASSWORD=$(grep -Pom 1 "(?<=^password = ).*$" $PATH_TO_PASSWORDS)
MYSQL_USER="root"
MYSQL=/usr/bin/mysql
MYSQLDUMP=/usr/bin/mysqldump
mkdir -p $BACKUP_PATH
mkdir -p $BACKUP_PATH/DATABESES
mkdir -p $BACKUP_PATH/FTPBACKUP
mkdir -p /root/logs/
touch /root/logs/stdoutBACKUP.log
touch /root/logs/stderrorBACKUP.log
set -e
echo "${info} Start MySql Backup" | awk '{ print strftime("[%H:%M:%S] |"), $0 }'
databases=`$MYSQL --user=$MYSQL_USER -p$MYSQL_PASSWORD -e "SHOW DATABASES;" | grep -Ev "(Database|mysql|information_schema|performance_schema)"`
for db in $databases; do
echo "${info} Backup Database $db" | awk '{ print strftime("[%H:%M:%S] |"), $0 }'
$MYSQLDUMP --force --opt --user=$MYSQL_USER -p$MYSQL_PASSWORD --databases $db | gzip > "$BACKUP_PATH/DATABESES/$db-$datum.gz"
done
echo "${info} Start create FILE Backup." | awk '{ print strftime("[%H:%M:%S] |"), $0 }'
cd $PATH_TO_WEBFOLDER
# make absolute and add dir
backup_path="$(readlink -f "$backup_path")/FTPBACKUP"
cd $PATH_TO_WEBFOLDER
for d in /*; do
d="${d%/}" # strip trailing slash
if [ -n "${d##*(backup)*}" ]; then
tar -cvvzf "$backup_path/FTPBACKUP/$d-$datum.tgz" "$d"
fi
done
# >>/root/logs/stderrorBACKUP.log 2>&1 >>/root/logs/stdoutBACKUP.log
# Delete files older than 30 days
#find $BACKUP_PATH/* -mtime +30 -exec rm {} \;
#Backup, in die install einfügen
#crontab -e
#00 20 * * * /path/to/backup.sh
#Ordner Entpacken
#tar -xvf test.tar.gz
echo "${ok} Backup finished!" | awk '{ print strftime("[%H:%M:%S] |"), $0 }'
|
|