wget automatisieren

Status
Für weitere Antworten geschlossen.

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.662
Punkte für Reaktionen
1.560
Punkte
314
Hi!

Ich habe mich nochmal ein wenig mit der Auswertung der /var/log/cron.log beschäftigt. Mich hat vor allem die Dateigröße gestört, die nach einem Scriptdurchlauf erzeugt wurde. Der Grund dafür ist, das wget standardmäßig jeden Schritt protokolliert und das dann auch in der cron.log festgehalten wird. Bei ca. 9000 Dateien kommt da ganz schön was zusammen.

So geht das ja nicht, dachte ich mir und suchte nach einer Lösung. Ich fand sie auch in der wget-Anweisung und habe damit gleich 2 Fliegen mit einer Klappe geschlagen. Ich umgehe jetzt die cron.log und schreibe gleich eine eigene Protokolldatei (/var/log/wget.log), die dann bei jedem Durchlauf wieder überschrieben wird. Das hält die Dateigröße der neuen wget.log Protokolldatei ziemlich klein.

Hier erstmal mein angepasstes Script

Code:
#!/bin/sh
wget -m -nv -o /var/log/wget.log -P /volume1/BACKUPVERZEICHNIS/ ftp://BENUTER:PASSWORT@DOMAIN.TLD/

dat_now=`date +%Y-%m-%d_%H:%M:%S`

cat /var/log/wget.log | /opt/bin/nail -s"Die Sicherung wurde am $dat_now durchgeführt" MAIL@PROVIDER.TLD

und hier nochmal die Optionen im Überblick!
-P, --directory-prefix=PREFIX Dateien unter dem Verzeichnis PREFIX/...
speichern

-nv oder --non-verbose
Es werden weniger meldungen ausgegeben.

-m oder --mirror
Aktiviert Optionen, die zum Erstellen eines Mirrors (Spiegels) einer Website notwendig sind. Folgende Optionen werden aktiviert: -r -N -l inf --no-remove-listing

-o Datei oder --output-file=Datei
Protokoll-Meldungen werden in die angegebene Datei geschrieben. Wenn die Datei bereits existiert, wird sie überschrieben.

So weit so gut. Jetzt habe ich das ganze schon mal von ca. 9000 Zeilen auf etwa 490 Zeilen geschrumpft. Super Leistung!

Aber.... das meiste, was jetzt noch protokolliert wird, sind die .listing Informationen, die wget anscheinden in jedem Verzeichnis anleget. Das ganze sieht im Protokoll dann ungefähr so aus:
Code:
20:35:46 URL: ftp://BENUTER:PASSWORT@DOMAIN.TLD/ [1067] -> "/volume1/BACKUPVERZEICHNIS/.listing" [1]
Da mir diese Info's nicht wirklich etwas nutzen, würde ich diese gern auch aus dem Protokoll streichen, so das am Ende nur die reine Information in der wget.log geschrieben wird, welche Dateien sich geändert haben, weche dazu gekommen sind und welche gelöscht wurden.

Aber wie mache ich das? Da die Zeile ja nichts anderes als ein String ist (richtig), kann man das doch bestimmt in irgendeiner Form, wie z.B.
Code:
Wenn die Zeile *.listing" [1] enthält dann lösche diese Zeile
...oder so als Anhaltspunkt zum löschen angeben. Aber an und mit welchem Befehl kann ich das umsetzen? An den wget, oder vielleicht an den cat Befehl? Oder muß ich mir dafür in dem Script selber irgendeine Routine einbauen und wenn ja, wie könnte sowas ausehen?

Ich hoffe ich hab mich nicht zu kompliziert ausgedrückt und ihr könnt mir vielleicht dabei helfen!

Danke, Tommes!
 

Merthos

Benutzer
Mitglied seit
01. Mai 2010
Beiträge
2.709
Punkte für Reaktionen
2
Punkte
84
grep mit Negation.
Rich (BBCode):
cat /var/log/wget.log | grep -v listing > /var/log/wget.filtered.log
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.662
Punkte für Reaktionen
1.560
Punkte
314
Morgen zusammen!

Merthos, das war ein Volltreffer! Danke dir vielmals für diesen Tipp. Ich glaub, da wäre ich nie drauf gekommen! Super

Hab es grad mal ausprobiert und konnte beim ersten Durchlauf das ganze von ca. 530 Zeilen, auf 48 Zeilen einkürzen. Bei einem zweiten Durchlauf gab es sogar nur eine Änderung zu verzeichnen. Genau so will ich das haben. Und weil es so schön ist, hier noch mal das angepasste Script:

Code:
#!/bin/sh

wget -m -nv -o /var/log/wget.log -P /volume1/BACKUPVERZEICHNIS/ ftp://BENUTER:PASSWORT@DOMAIN.TLD/

cat /var/log/wget.log | grep -v listing > /var/log/wget.filtered.log

dat_now=`date +%Y-%m-%d_%H:%M:%S`

cat /var/log/wget.filtered.log | /opt/bin/nail -s"Die Sicherung wurde am $dat_now durchgeführt" MAIL@PROVIDER.TLD

Nochmals Danke

Gruß Tommes!
 

PatrickS3

Benutzer
Mitglied seit
18. Mrz 2010
Beiträge
547
Punkte für Reaktionen
0
Punkte
42
Sauber.
Ich hatte ein Monster Cron.log File von über 10 MB nach nur einem einzelnen Durchlauf. Ich werde das bei Gelegenheit mal in mein Script einbauen. Danke.

Läuft.

Eine Frage / Anmerkung noch.

Als ich bei meinen Versuchen vor 2 Tagen die cron.log mitzusenden Deinen Befehl im Script hatte:

Code:
cat /var/log/cron.log | /opt/bin/nail -s"Webspace wurde am $dat_now gesichert" DEINE-MAIL@PROVIDER.TLD

bekam ich zwar eine 10 MB grosse E-Mail, welche aber keinen Inhalt hatte.

Ich habe nun in meinem Script den Aufruf so abgeändert, das die backup.log als Anhang mitgeschickt wird:

Code:
echo "Der cronjob wurde abgeschlossen." | /opt/bin/nail -s"Der Server wurde am $dat_now gesichert" -a /var/log/dft-backup.log mailadresse@provider.tld


Gruss Patrick
 
Zuletzt bearbeitet:

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.662
Punkte für Reaktionen
1.560
Punkte
314
Hi Patrick!

Habe die nail-Anweisung in meinem Script jetzt auch so, wie du sie oben aufgeführt hast. Jetzt erhalte ich auch das ganze als Anhang. Bei der o.A. nail-Anweisung von mir wurde der log-Inhalt gleich in die Mail geschrieben. Das könnte auch der Grund gewesen sein, das du etwas ohne Inhalt bekommen hast?!? Ach und das echo hab ich weggelassen.

Code:
/opt/bin/nail -s"Der Server wurde am $dat_now gesichert" -a /var/log/wget.filtered.log mailadresse@provider.tld

Na, ist ja auch Geschmakssache. Kann ja jeder machen wie er will. Man kann diesen Part ja auch komplett weglassen. Wie auch immer...

Ich konnte jedenfalls so die Dateigröße der .log Datei von ca. 5 MB auf wenige KB runterschrauben. Es kommt natürlich immer darauf an, wieviele Änderungen wget in das Protokoll schreibt.

Für mich war das jedenfalls ein Erfolg auf ganzer Linie!

Das ganze bekommt langsam "WIKI-Reife" :eek:

Gruß Tommes!
 

dany

Benutzer
Mitglied seit
31. Mrz 2008
Beiträge
352
Punkte für Reaktionen
0
Punkte
22
Hallo PatrickS3

Du kannst ja das Log vorher in ein Zip verpacken. Da es eine Text-Datei ist, hast du sicher eine gute Komprimierung.

Gruss Dany
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.662
Punkte für Reaktionen
1.560
Punkte
314
Hi Dany!

Das ist schon richtig, was du da sagst. Aber eigentlich habe ich den ganzen Aufwand betrieben (wget -Optionen anpassen, mit grep nicht benötigte Zeilen löschen etc.) um die Dateigröße so gering wie möglich zu halten und dabei eine bessere Lesbarkeit des .log-Files zu erzielen (ist natürlich immer noch ausbaufähig). Und wir sprechen hier in meinem Fall von einem Unterschied von ca. 8900 Zeilen. Bei Patrick wird es bistimmt mehr als das Doppelte sein.
Man muß natürlich bedenken, das bei einer Erstsicherung auch eine recht große .log Datei produziert wird, da ja erstmal alles gesichert wird. Aber späteststens beim nächsten Backup sollte sich das extrem reduzieren.

Klar kann man das ganze dann noch "on top" in ein zip-Archiv packen und erst dann versenden, aber ich denke, das es auch ohne gehen sollte. Kommt natürlich auch immer drauf an, wie hoch der Server frequentiert wird, wie oft sich die Dateien ändern und in welchen Abständen man eine Sicherung durchführt.

Wie gesagt, vom Grund auf richtig was du sagst Dany, aber ich denke, es geht auch ohne. Und ich will mir das log-File auch immer gleich ansehen können, auch wenn ich keinen Packer an Bord habe.

Gruß Tommes!
 
Zuletzt bearbeitet:

PatrickS3

Benutzer
Mitglied seit
18. Mrz 2010
Beiträge
547
Punkte für Reaktionen
0
Punkte
42
Hallo,
also heute NAcht lief der zweite echte Cronjob. Alles bestens wie es scheint, das Log-File ist auch per Mail angekommen.

Jetzt habe ich eine Frage zu wget.

Wenn der Cronjob zum zweiten Mal läuft, sichert wget ja alle neuen und geänderten Dateien. Dies ist auch so durchgeführt worden.

Was passiert aber mit Dateien, die auf dem Server gelöscht wurden? Werden die im Backupverzeichnis auf der DS auch gelöscht?
Das wäre nämlich in meinem Fall nötig. Da werden auf dem Server unter Umständen Dateianhänge, Bilder aus der Galerie etc. gelöscht.
Auch bei einer Änderung am Forum (die ich beispielsweise letzte Woche gemacht habe) werden Dateien und sogar Verzeichnisse gelöscht.

Kann man wget in dieser Richtung mit Parametern versorgen?

Gruss Patrick
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.662
Punkte für Reaktionen
1.560
Punkte
314
Hi!

Ich kann es jetzt nicht 100%ig bestätigen, aber mit der Option -m für Mirror, im wget- Befehl sollte es eigentlich so sein, das eine 1 zu 1 Kopie entsteht. Müsst ich aber ehrlich gesagt erstmal selber testen.

Edit: Steht das nicht im Protokoll, was dir zugesendet wurde?

Gruß Tommes!
 
Zuletzt bearbeitet:

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.662
Punkte für Reaktionen
1.560
Punkte
314
PS: wie groß war denn dein Logfile?
 

PatrickS3

Benutzer
Mitglied seit
18. Mrz 2010
Beiträge
547
Punkte für Reaktionen
0
Punkte
42
Hallo,
im Log steht nur was neu heruntergeladen wurde. Gelöscht wurde nichts, die Verzeichnisse welche ich auf dem Server gelöscht habe sind im Backup immer noch vorhanden.

Das Logfile war 176kb gross.
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.662
Punkte für Reaktionen
1.560
Punkte
314
Hi!

Die Option -m setzt sich laut GNU zu wget aus mehreren Optionen zusammen, die wären...
-r -N -l inf --no-remove-listing
... vielleicht schaust du mal, was die einzelnen Optionen bedeuten, oder ergänzt noch eine Option die das Löschen von alten Dateien ansteuert. Ist mir auf dem Handy grad zu lästig, danach zu suchen. Vielleicht Schau ich heut Abend mal nach.

Gruß Tommes!
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.662
Punkte für Reaktionen
1.560
Punkte
314
OK, also die Optionen die in -m enthalten sind, haben folgende Bedeutung:
-r -N -l inf --no-remove-listing

-r oder --recursive
Der Download findet rekursiv statt. Verlinkte Seiten oder Unterverzeichnisse werden ebenfalls heruntergeladen. Verweise auf andere Webseiten wird gefolgt. Diese Option ist mit Vorsicht zu verwenden.

-N oder --timestamping
Es werden nur Dateien heruntergeladen, die neuer als die lokalen Dateien sind.

-l Zahl oder --level=Zahl
Legt die maximale Rekursionstiefe fest. Dabei stehen 0 und inf für eine unbegrenzte Tiefe.

--no-remove-listing’
Don't remove the temporary .listing files generated by ftp retrievals. Normally, these files contain the raw directory listings received from ftp servers. Not removing them can be useful for debugging purposes, or when you want to be able to easily check on the contents of remote server directories (e.g. to verify that a mirror you're running is complete).

Dann habe ich noch die Option --delete-after gefunden, jedoch weiß ich nicht recht, wie ich das interpretieren soll. Laut GNU...
‘--delete-after’
This option tells Wget to delete every single file it downloads, after having done so. It is useful for pre-fetching popular pages through a proxy, e.g.:

wget -r -nd --delete-after http://whatever.com/~popular/page/

The ‘-r’ option is to retrieve recursively, and ‘-nd’ to not create directories.

Note that ‘--delete-after’ deletes files on the local machine. It does not issue the ‘DELE’ command to remote FTP sites, for instance. Also note that when ‘--delete-after’ is specified, ‘--convert-links’ is ignored, so ‘.orig’ files are simply not created in the first place.

Ob das jetzt die Option ist, die wir suchen, weis ich nicht. Vielleicht hat da ja jemand Erfahrung mit.

Gruß Tommes!
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.662
Punkte für Reaktionen
1.560
Punkte
314
Ich nochmal!

Hab ich grade hier gefunden...
Dateien, die zwischen zwei Kopiervorgängen auf dem Server gelöscht werden, bleiben in der Kopie erhalten.

Tja, dann ist das mit wget so nicht umsetzbar. Hmmm..... ärgerlich!


Gruß Tommes!
 

PatrickS3

Benutzer
Mitglied seit
18. Mrz 2010
Beiträge
547
Punkte für Reaktionen
0
Punkte
42
Hallo,
danke für Deine Mühe. Bin gestern Abend auch bei diesem Punkt angekommen.
Um die auf dem Server gelöschten Dateien auch im Backup zu entfernen müsste man rsync nutzen, welches aber von sich aus keine FTP Verbindung herstellen kann. Dazu braucht man ein anderes Tool "curlftpfs" mit dem man vor dem Aufruf von rsync den FTP Pfad lokal als Laufwerk mounted. Danach den rsync ausführen und dann wieder unmounten.

http://blog.rotzoll.net/2011/09/dat...-einem-ftp-server-und-seinem-lokalen-rechner/

http://www.andwil.de/blog/47/daten-vom-ftp-mit-rsync-sichern


Patrick
 

alfonso

Benutzer
Mitglied seit
17. Dez 2008
Beiträge
89
Punkte für Reaktionen
0
Punkte
0
Wo bekomme ich dieses wget auf meine Synology und wo bekomme ich es her?
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
bei mir ist eine Version bereits drauf:

Syno> which wget
/usr/syno/bin/wget

aber man kann sich per IPKG natürlich auch eins zusätzlich installieren, falls man merkt, dass bei dem eingebauten wichtige Optionen fehlen

Itari
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.662
Punkte für Reaktionen
1.560
Punkte
314
Was mache ich damit? Ich kann das auf meiner DS nicht finden. :(

Dir ist schon klar, das du das auf der Konsole (Telnet bzw. SSH) der DS ausführen musst? Auf der Konsole gibst du dann einfach...

which wget

... ein, und du erhälst sowas wie /usr/syno/bin/wget oder aber /opt/bin/wget, je nachdem, mit welchem "wget" deine DS arbeitet. Mit...

wget --help

... kannst du dir z.B. die Hilfe bzw. die Optionen zum wget-Befehl anschauen.

Tommes!
 

PatrickS3

Benutzer
Mitglied seit
18. Mrz 2010
Beiträge
547
Punkte für Reaktionen
0
Punkte
42
Guten Morgen,
ich grabe mal diesen etwas älteren Thread aus. Wie auf Seite 2 und 3 geschrieben nutze ich ja auch dieses kleine Script für wget. Und auch den Versand der .log Datei an meine Mailadresse über "nail".

echo "Der cronjob wurde abgeschlossen." | /opt/bin/nail -s"Der Server wurde am $dat_now gesichert" -a /var/log/dft-backup.log mailadresse@provider.tld

Da mir letzte Woche meine DS 410 gestorben ist, habe ich nun als Ersatz - weil von der Leistung ausreichend - eine DS 213j. Und damit ein Problem, da ich mich vorher nicht richtig schlau gemacht habe.
Die Installation von nail setzt ipkg voraus. Und das gibt es nicht für die CPU armv7 / Armada 370 der 213j.

Kennt jemand eine Alternative zu nail, die kein ipkg benötigt um aus dem Script heraus eine Mail mit dem Log zu versenden?

Gruß Patrick
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat