CronJob: backup

Bash, Shell, PHP, Python, Perl, CGI
primedomain
Posts: 23
Joined: 2002-08-04 21:36
 

Re: CronJob: backup

Post by primedomain »

tja, das wird immer lustiger.
Habe Deinen Vorschlag mal ausprobiert und einen der dumps, die ich vorher sowohl per email also auch nach Ã?bertragung durch ftp ohne Probleme habe komprimieren können, mehrmals per Skript verschickt. Die so verschickten gzip Dateien lassen sich schon gleich gar nicht mehr dekomprimieren. Stattdessen bekomme ich zwei Fehlermeldungen: "Incomplete code set" und "Bad block" :twisted:

In der FAQ auf der PA website habe ich gerade entdeckt:
Q: What is CRC error and why does it happen?
A: CRC error means that data that you are extracting does not match data that was compressed. Basically, your archive is corrupted. This usually happens when downloading files from Internet. We recommend trying to download the archive in question again, since most of corruptions happen when data is being downloaded
So einen Fehler habe ich ja vorher auch bekommen. Es scheint mir, daß das ganze ein E-Mail-Sende-Problem ist. Das würde auch insofern passen, als die Dateien auf dem Server jedesmal die identische Größe haben, während die emails unterschiedliche Größe haben und das ganze aber mehr oder weniger zufällig ist.

Ich habe mal testweise die gzip-Dateien, die ich über ftp gedowloaded habe, per Outlook an mich geschickt. Die empfangenen gzip-Dateien lassen sich astrein dekomprimieren. Meine Vermutung ist, daß die eigentliche Ursache des Problems im Sende-Vorgang liegt, der dazu führt, daß die Datei corrupted ist.

Die Emails, die über das Skript verschickt werden, haben ja folgendes im Header:
From: CGI-Mailer <cgi-mailer@kundenserver.de>
Received: from [xxxxxx] (helo=infongxxxx)
by mxbulk00.kundenserver.de with smtp (Exim 3.22 #2)
id 17ddno
for mail@fxxxxxx.com; Sat, 10 Aug 2002 23:29:40 +0200
Received: by infongxxxxx from local; Sat, 10 Aug 2002 23:29:39 +0200
Jetzt frage ich mich, ob man das Skript dazu bringen kann, die email statt über sendmail direkt über den Puretec SMTP server zu verschicken (smtp.1und1.com), da es zumindest mit Outlook dann zu keinem Problem kommt.

Macht das Sinn oder geht das sowieso nicht?

Danke!
thomi
Posts: 136
Joined: 2002-06-04 22:33
Location: Waldenbuch
 

Re: CronJob: backup

Post by thomi »

primedomain wrote:Es scheint mir, daß das ganze ein E-Mail-Sende-Problem ist. Das würde auch insofern passen, als die Dateien auf dem Server jedesmal die identische Größe haben, während die emails unterschiedliche Größe haben und das ganze aber mehr oder weniger zufällig ist.
Hm, das würde dem aber wiedersprechen, dass die Dateien unverschlüsselt problemlos ankommen?! Kannst du das nochmal checken, ob, wenn du nicht gezippte Dateien verschickst, diese komplett (!) richtig ankommen.
majortermi
Userprojekt
Userprojekt
Posts: 916
Joined: 2002-06-17 16:09
 

Re: CronJob: backup

Post by majortermi »

thomi wrote:
Wenn ich bzip2 verwende, weigert sich powerarchiver, die Datei zu dekomprimieren: "It doesn't appear to be a valid archive". Bah!
Hm, laut Homepage kann PowerArchiver bzip.
Das liegt wahrscheinlich daran, dass die Dateien die Extensions .gz haben, und er deshalb denkt, es müssten auch gzip-Archive sein. Probier mal aus, die Datei in .bz2 umzubennen, ich denke dann klappt es.
Erst nachlesen, dann nachdenken, dann nachfragen... :)
Warum man sich an diese Reihenfolge halten sollte...
primedomain
Posts: 23
Joined: 2002-08-04 21:36
 

Re: CronJob: backup

Post by primedomain »

Tja, es ist in der Tat so, daß auch die ungezippten Dateien nicht exakt vollständig ankommen. Allerdings enthalten sie nicht den gleichen Müll wie die gzip Dateien, weswegen mir das nicht gleich aufgefallen ist. :oops:
- ich habe 3 Backups ohne gzip im Abstand von 3 min gemacht
- und die sql-Dateien vom webserver per ftp übertragen.
- alle 3 Dateien haben exakt 40627 Zeilen und entsprechen exakt den sql Dateien, die ich mit meinem normalen mysql dump bekomme.
- die 3 Dateien, die per mail angekommen sind, enthalten dagegen Fehler:
> 40291, 40227, 40371 Zeilen, teilweise mittendrin bzw. ganz am Ende Leerzeilen, einmal korrekter Schluß, 2 mal aber ca 50 Leerzeilen, wobei in einem Fall die queries, die am Ende stehen sollten, in Wirklichkeit nicht da sind.
> Mittendrin sind einige queries fehlerhaft, zB:
INSERT INTO phpbb_search_wordmatch VALUES (584,4653,0);
INSERT INTO phpbb_search_wordmatch VALUEmatch VALUES (584,7760,0);
In den über ftp gedownloadeten Dateien tritt kein einziger dieser Fehler auf.

Dateiendung: korrekt, wenn ich die Dateiendung anpasse, erkennt er zwar das Format, aber ich bekomme als Fehler: "Access violation at address 017AB386 in module libbz2.dll. Write of address 0203F000". Das riecht wohl eher nach Programmfehler.

Soweit ich das alles aber richtig interpretiere, liegt es wohl am Versenden?
thomi
Posts: 136
Joined: 2002-06-04 22:33
Location: Waldenbuch
 

Re: CronJob: backup

Post by thomi »

primedomain wrote:Soweit ich das alles aber richtig interpretiere, liegt es wohl am Versenden?
Sieht so aus. Probier doch mal, mit mutt eine Datei zu versenden. Kommt diese auch verstümmelt an?

Falls du dich mit mutt nicht auskennst, dann hier ein kleines Howto:
Zunächst mutt starten durch Eingabe von

Code: Select all

mutt
auf der Konsole. Dann m für Mail senden, unten Empfänger und Subject angeben. Nun startet sich der vi (oder dein Standard-Editor), den kannst du gleich wieder beenden mit

Code: Select all

:wq
Jetzt mit a die Datei anhängen. ? ermöglicht dabei das "Browsen" im Dateibaum. Zum Schluß y zum Versenden und Fertig.
primedomain
Posts: 23
Joined: 2002-08-04 21:36
 

Re: CronJob: backup

Post by primedomain »

pxxxxxx@kundenserver:~ > mutt
bash: mutt: command not found
:( Ich hoffe, ich stelle mich nur dumm an...
thomi
Posts: 136
Joined: 2002-06-04 22:33
Location: Waldenbuch
 

Re: CronJob: backup

Post by thomi »

primedomain wrote:
pxxxxxx@kundenserver:~ > mutt
bash: mutt: command not found
:( Ich hoffe, ich stelle mich nur dumm an...
Komisch, eigentlich ist mutt ist der Standardkonfiguration des RootServers installiert. Bei der Eingabe von

Code: Select all

rpm -aq | grep mutt
sollte erscheinen:

Code: Select all

mutt-1.3.16i-71
Wenn nicht, installier mutt mit Yast aus Serie n.
primedomain
Posts: 23
Joined: 2002-08-04 21:36
 

Re: CronJob: backup

Post by primedomain »

äh... das ist aber ein Exklusiv-Server. (hätte ja eigentlich gedacht, daß hätte ich geschrieben, aber das war im anderen Thread. Sorry).
pxxxx@kundenserver:~ > rpm -aq | grep mutt
failed to open //var/lib/rpm/packages.rpm
thomi
Posts: 136
Joined: 2002-06-04 22:33
Location: Waldenbuch
 

Re: CronJob: backup

Post by thomi »

primedomain wrote:äh... das ist aber ein Exklusiv-Server. (hätte ja eigentlich gedacht, daß hätte ich geschrieben, aber das war im anderen Thread. Sorry).
Oh, ok. War ja auch nur ein Versuch, ob mutt korrekte Mails versenden kann. :roll:

So richtig eine Idee hab ich jetzt auch nicht mehr, es sieht so aus, als wenn deine Sendmail-Installation Probleme macht. Als Alternative könntest du dir ein kleines Perl-Skript bauen, das die Backups per FTP auf einen anderen Server/Webspace kopiert (sofern du sowas hast).
primedomain
Posts: 23
Joined: 2002-08-04 21:36
 

Re: CronJob: backup

Post by primedomain »

ok. Danke für Deine Hilfe, damit ist jetzt zumindest mal der Schuldige ausgemacht.
Schaut das aus wie ein bug in sendmail oder hat Puretec da irgendwas bei der Installation versemmelt? (es war zB auch so, daß crontab zuerst nicht funktioniert hat und Puretec es dann nochmal installiert hat). Andererseits sind mir aber zB bei den mails, die das Forum verschickt, noch nie Fehler aufgefallen (jedenfalls solange ich das per sendmail gemacht habe, da verwende ich jetzt ja auch SMTP).
Wie kriege ich eigentlich die sendmail-Version raus, mit phpinfo() habe ich nix gefunden?
Alternativer Speicherplatz würde zur Verfügung stehen, aber per Mail wäre es mir schon lieber. Es ist also nicht möglich, das Versenden über SMTP zu machen statt über sendmail?
thomi
Posts: 136
Joined: 2002-06-04 22:33
Location: Waldenbuch
 

Re: CronJob: backup

Post by thomi »

primedomain wrote:Es ist also nicht möglich, das Versenden über SMTP zu machen statt über sendmail?
Doch, mit einem Perl-Skript und dem Modul Net::SMTP sollte das auch gehen. Es gibt sicher auch Lösungen mit PHP. Einfach mal bei Google suchen.

Edit: Für PHP gibts zum Beispiel das hier http://phpmailer.sourceforge.net/. Anhand der Beispiele sollte sich ein einfaches Skript machen lassen.
primedomain
Posts: 23
Joined: 2002-08-04 21:36
 

Re: CronJob: backup

Post by primedomain »

Danke für den Link. Damit bin ich allerdings *etwas* überfordert :lol: , wie ich das jetzt hinbasteln muß. Sehe ich das richtig, daß ich uuencode etc rausschmeiße und dann ein eigenes php Script brauche, das die vorher auf dem Webserver abgespeicherten Dateien verschickt? Hmm. Da ist mir schon nicht klar, wie ich es erreiche, daß immer nur die letzte backup Datei verschickt wird. Naja, werde mich mal durchwühlen...
thomi
Posts: 136
Joined: 2002-06-04 22:33
Location: Waldenbuch
 

Re: CronJob: backup

Post by thomi »

primedomain wrote:Danke für den Link. Damit bin ich allerdings *etwas* überfordert :lol:
Na gut, weil heute Sonntag ist:
Zuerst phpmailer runterladen und die beiden Dateien class.phpmailer.php und class.smtp.php in das Backup-Verzeichnis kopieren. Dann folgendes Skript als Datei mail.php im selben Verzeichnis erstellen:

Code: Select all

<?php
require("class.phpmailer.php");

$mail = new phpmailer();

$mail->From     = "ABSENDER-EMAIL";
$mail->FromName = "ABSENDER-NAME";
$mail->Host     = "SMPTSERVER";
$mail->Mailer   = "smtp";

$mail->AddAddress("EMPFÃ?NGER-EMAIL", "EMPFÃ?NGER-NAME");
$mail->Subject = $argv[1];
$mail->Body    = "";
$mail->AddAttachment($argv[2], $argv[3]);

$mail->Send();

$mail->ClearAddresses();
$mail->ClearAttachments();
?>
ABSENDER-NAME, ABSENDER-EMAIL, SMTPSERVER, EMPFÃ?NGER-EMAIL und EMPFÃ?NGER-NAME entsprechend ersetzen. Dann kannst du das Skript wie folgt aufrufen:

Code: Select all

php mail.php SUBJECT DATEI DATEINAME
SUBJECT ist durch den Betreff zu ersetzen, DATEI durch die Backup-Datei und DATEINAME durch den gewünschten Dateinamen im Anhang. Also die uuencode-Zeile so ersetzen:

Code: Select all

php mail.php "Backup-Sicherung des Blahblah Forums: Sicherung vom `date +%Y%m%d%H%M`" ${DIR}${FILE}.gz ${FILE}.gz
(Letzteres habe ich allerdings nicht getestet.)
primedomain
Posts: 23
Joined: 2002-08-04 21:36
 

Re: CronJob: backup

Post by primedomain »

Ich weiß es wirklich zu schätzen, daß Du mir hier so ausführlich hilfst. :-D
thomi wrote:

Code: Select all

php mail.php SUBJECT DATEI DATEINAME

Code: Select all

php mail.php "Backup-Sicherung des Blahblah Forums: Sicherung vom `date +%Y%m%d%H%M`" ${DIR}${FILE}.gz ${FILE}.gz
Da bekomme ich jeweils:
bash: php: command not found
thomi
Posts: 136
Joined: 2002-06-04 22:33
Location: Waldenbuch
 

Re: CronJob: backup

Post by thomi »

primedomain wrote:Da bekomme ich jeweils:
bash: php: command not found
Hm, ist auf dem Exklusiv-Server kein normales php drauf? Hab leider kein Exklusiv-Server, sonst könnte ich es mal testen.
primedomain
Posts: 23
Joined: 2002-08-04 21:36
 

Re: CronJob: backup

Post by primedomain »

Gute Frage. php ist eigentlich installiert (sonst würde ja auch das ganze Forum nicht laufen). Gibt's irgendwas in der phpinfo, auf das es ankommen könnte?
thomi
Posts: 136
Joined: 2002-06-04 22:33
Location: Waldenbuch
 

Re: CronJob: backup

Post by thomi »

primedomain wrote:Gute Frage. php ist eigentlich installiert (sonst würde ja auch das ganze Forum nicht laufen).
Naja, die Frage ist halt, ob auch der CommandLine Interpreter mit installiert wurde und wenn ja, wo? Da kannst ja mal ein

Code: Select all

locate php
probieren.
primedomain
Posts: 23
Joined: 2002-08-04 21:36
 

Re: CronJob: backup

Post by primedomain »

bash: locate: command not found
:(
thomi
Posts: 136
Joined: 2002-06-04 22:33
Location: Waldenbuch
 

Re: CronJob: backup

Post by thomi »

Dann probier:

Code: Select all

 find / -name "php" 2> /dev/null
Findest du so php?
primedomain
Posts: 23
Joined: 2002-08-04 21:36
 

Re: CronJob: backup

Post by primedomain »

pxxxxx@kundenserver:~ > find / -name "php" 2> /dev/null
/usr/local/include/php
/usr/local/lib/php
/usr/local/php
:-D
thomi
Posts: 136
Joined: 2002-06-04 22:33
Location: Waldenbuch
 

Re: CronJob: backup

Post by thomi »

primedomain wrote:
pxxxxx@kundenserver:~ > find / -name "php" 2> /dev/null
/usr/local/include/php
/usr/local/lib/php
/usr/local/php
:-D
Hm, und findest du darin das Executable von php? Wenn nicht, nochmal ein schönerer find-Befehl:

Code: Select all

find / -type f -name "php" 2> /dev/null
primedomain
Posts: 23
Joined: 2002-08-04 21:36
 

Re: CronJob: backup

Post by primedomain »

ich kann in diese Verzeichnisse wohl nicht reinschauen, da ich dazu root-Zugriff haben müßte?
Wenn ich den zweiten find Befehl eingebe, bekomme ich keine besondere Ausgabe, sondern es kommt einfach wieder die Kommando-Zeile:
pxxxx@kundenserver:~ > find / -type f -name "php" 2> /dev/null
pxxxx@kundenserver:~ >
thomi
Posts: 136
Joined: 2002-06-04 22:33
Location: Waldenbuch
 

Re: CronJob: backup

Post by thomi »

Tja, dann ist das Executable von php nicht installiert oder du kommst nicht ran. Eine Idee hätte ich noch. Probier mal ob es das Programm

Code: Select all

wget
oder

Code: Select all

lynx
gibt?
primedomain
Posts: 23
Joined: 2002-08-04 21:36
 

Re: CronJob: backup

Post by primedomain »

wget: missing URL
Usage: wget [OPTION]... [URL]...

Try `wget --help' for more options.
pxxxx@kundenserver:~ > lynx

Can't Access `file://localhost/usr/doc/packages/lynx/lynx_help/lynx_help_main.html'
Alert!: Unable to access document.

lynx: Can't access startfile
bei lynx öffnet sich anscheinend ein Editor, der sich dann automatisch schließt.
thomi
Posts: 136
Joined: 2002-06-04 22:33
Location: Waldenbuch
 

Re: CronJob: backup

Post by thomi »

Ok, dann geht meine Lösung (ist aber nicht sehr elegant).

Das Skript wie folgt modifizieren:

Code: Select all

<?php
if (empty($HTTP_GET_VARS["subject"]) ||
    empty($HTTP_GET_VARS["file"]) ||
    empty($HTTP_GET_VARS["name"])) {
  exit();
}

require("class.phpmailer.php");

$mail = new phpmailer();

$mail->From     = "ABSENDER-EMAIL";
$mail->FromName = "ABSENDER-NAME";
$mail->Host     = "SMTPSERVER";
$mail->Mailer   = "smtp";

$mail->AddAddress("EMPFÃ?NGER-EMAIL", "EMPFÃ?NGER-NAME");
$mail->Subject = $HTTP_GET_VARS["subject"];
$mail->Body    = "";
$mail->AddAttachment($HTTP_GET_VARS["file"], $HTTP_GET_VARS["name"]);

$mail->Send();

$mail->ClearAddresses();
$mail->ClearAttachments();
?>
Wieder die grossgeschriebenen Werte entsprechend ersetzen. Weiterhin muss das Skript (und die zugehörigen Klassen-Dateien) sowie die Backupdateien in ein vom Webserver lesbares Verzeichnis. Damit nicht jeder das Skript aufrufen kann, darin eine .htaccess erstellen:

Code: Select all

Order Deny,Allow
Deny from all
Allow from 123.123.123.123
123.123.123.123 durch die IP deines ExklusivServers ersetzen.

Nun die alte uuencode-Zeile so ersetzen:

Code: Select all

wget "http://DOMAIN/DIR/mail.php?subject=Backup-Sicherung des Blahblah Forums: Sicherung vom `date +%Y%m%d%H%M`&file=${DIR}${FILE}.gz&name=${FILE}.gz"
DOMAIN und DIR durch deine Domain und das Verzeichnis ersetzen.

Erklärung: Das Skript wird jetzt als PHP-Skript über den Webserver aufgerufen. Der Zugriff ist auf die IP deines Servers beschränkt, so dass niemand anders an die Backup-Sachen kommt.

Es müßte dann die Mail bei dir ankommen. Außerdem entstehen vom Request an den Webserver Dateien, die so aussehen:

Code: Select all

mail.php?subject=Backup-Sicherung des Blahblah Forums: Sicherung vom 200208112007&file=xxxxxxxxxx&name=xxxxxxxxx
Die kannst du am Ende des Skriptes noch mit

Code: Select all

rm -f mail.php?subject*
löschen.
Post Reply