per ssh eine Mail versenden

Hallo,
danke schon mal an alle, die mir bisher geholfen haben, hier mal der aktuelle Stand in wie weit das Script läuft.


Es wird eine Mail versendet mit folgendem Inhalt:
begin-base64 644 Mysql-Daten
QlpoORdyRThQkAAAAAA=
====


Wenn ich die Datei ausführe passiert folgendes:
Code:
./backup: line 1: =20071130: command not found
Shutting down service MySQL                                          done
mysqldump: Got error: 2002: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) when trying to connect
Starting service MySQL                                               done
Mail wurde versand!

Ich versteh nicht soganz was er möcht denn der Server ist ja gestoppt!???

Könnt ihr mit bitte weiterhelfen?

gruß
jogie
 
Hallo,

wie willst du denn bitte zum MySQL Server verbinden wenn du ihn ausschaltest :confused:

Mach mal das
[...]
/etc/init.d/mysql start
[...]
/etc/init.d/mysql stop
[...]
raus ;)
 
Last edited by a moderator:
Super danke!
Ich hab gedacht ich müsste ihn stoppen damit nichts passiert aber so ist auch gut!
Die Mail kommt jetzt mit Zeichen wo ich nichts damit anfangen kann
Kurzer Auszug:
begin-base64 644 Mysql-Daten
QlpoOTFBWSZTWdI/rVwCISZf/XA6f/////////T////wXAAJFZQERUQaABAA
Y1L+fXxQEDoVDrA0BVAtilHI5UBWAJkBXwAACMLyLNXYfT098Duu3o6uwAdM
7DCElHWutQ6+wB93AAAAAAAAAAc++vg+Puz4IfeA2vbzLdweAPVMBnmY3gCn
AAAAAAAAAAAAAcEnr0uXOgVPebz1wAAAAAAAAAAOGjKUAG4DcIBADsAwCIhQ
kABAACgAgCgQAKASgyBQk9AFVQAAHd8Kfbtxe5H0Ab5mAAaDIoJKUaA0ayAm
YSCgAUAMgi3N0CgCh0AFAAAaAFaAAZBsw8AAKfSgAFUCQoAAMmolU+8XAAAA
BJ33u6oVKKkUoVSqBFQoRFBQABSgUr7j4eAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAKAEKh7YAAAAAAAAAAAAAAAAAAAAAAAAAAfZ
g6NPuG2ZyBeFvN23SToBlAQbWG9rsAADobu5ni3JwAPe49D6ejZtnwAOMK7H
odfH3XM3b2FA4UJAAADnD3rtnbuLmzoD2nbXZQBRQLx3acqoAB17soAAFFAA

Kann man das noch irgendwie ändern mit den richtigen Befehlen und Inserts usw?

Des Weiteren ist im Betreff auch kein Datum sondern nur "Backup-Daten"!

Gruß
jogie
 
Hallo,

die komprimierten Daten kann man sicherlich nicht lesen ...
Versuche es mal so:
mysqldump -uUSER -pPASS DATENBANK | mailx -s "Backup-Daten `date +%Y-%m-%d\ %H-%M-%S`" EMAIL
Du solltest dein Backup in einer E-Mail (ohne Anhang!) inkl. Datum im Betreff bekommen.
 
Die Mail kommt jetzt mit Zeichen wo ich nichts damit anfangen kann:
Bei Datenbanken, die auch binäre Daten (z.B. Bilder) in blobs enthalten können, ist es wichtig, die Daten entsprechend zu kodieren, damit sie via Mail verschickt werden können, da Binärdaten auf Grund der enthaltenen Steuerzeichen nicht mit Mail verschickt werden können[1]. Bei etwas größeren Datenbanken ist es notwendig den Dump zu komprimieren, um ihn überhaupt verschicken zu können -- evtl. muss man ihn zusätzlich noch aufteilen.

Zum Anschauen des Dumps auf dem Empfangsrechner muss die Mail als txt gespeichert werden und anschließend mit 'uudecode mail.txt' > dump.sql.bz2' dekodiert werden. Danach kann man mit 'bunzip2 dump.sql.bz2' ihn dekomprimieren -- fertig. Natürlich sind die benötigten Befehle nicht bei den Standard-Programmen eines Windowsrechners mit dabei (welche Programme sind das schon?), aber zum Testen des Backups (und im Falle eines Falles zum Restore) kann man die mail.txt ja mit WinSCP3 wieder auf den Linux-Server kopieren und dort auspacken.

Des Weiteren ist im Betreff auch kein Datum sondern nur "Backup-Daten"!

Das lag daran, dass es ja auch immer die Fehlermeldung "line 1: =20071130: command not found" kommt. Lass das '$' in der ersten Zeile weg!
Im Übrigen funktioniert das Programm auch nur deshalb, weil der Kernel im Zweifelsfall das Script der Shell übergibt -- besser wäre es in der 1.Zeile explizit die Shell anzugeben:
Code:
#! /bin/bash

Viele Grüße,
LinuxAdmin

[1] Ich habe es nicht ausprobiert, wie der Dump eines blobs aussieht -- kann natürlich sein, dass die Daten schon in einem 7-Bit-Format vorliegen; in diesem Fall braucht man das 'uuencode' nicht.
 
Also ich hab gerade die Datei ausgeführt und was soll ich sagen die Mail wurde gesandt und auf den ersten Blick sieht es auch so aus wie wenn ich den DUMP mit PHPMyAdmin mache. Ich muss mir es noch etwas genauer angucken und auch gucken ob alles drin ist.

Hab mal zum Test die Datei als Cron gesetzt für heute Nacht. Mal shen ob dies auch geht !=?

gruß
jogie
 
Also ich hab den Cron auf Nachts 3 Uhr gesetzt allerdings ist keine Mail gekommen!
Muss ich dafür auch noch Rechte verteilen? Und wenn ja welche?

gruß
jogie
 
Also mein Eintrag in der Crontab sieht so aus!

Code:
# m h dom mon dow user  command
0 3     * * *   root    /etc/backup

Was soll ich ändern?

Gruß
jogie
 
starte das Script mal mit explizit gelöschtem Pfad von Hand und schau ob's funktioniert:

PATH=/bin /etc/backup

da sieht man dann meist schnell, welcher Pfad in der Testshell gesetzt war, beim cron aber nicht
 
server:/home/Benutzer# PATH=/bin /etc/backup
/etc/backup: line 3: mailx: command not found
/etc/backup: line 3: mysqldump: command not found
Mail wurde versand!
server:/home/Benutzer#

Was kann ich jetzt dadraus schließen?
 
Dass Du in dem Script entweder den Suchpfad richtig setzen, oder alle Programme mit absoluten Pfaden aufrufen musst:

Code:
#!/bin/bash

export PATH=/bin:/usr/bin

mysqldump .... | mailx ....
oder
Code:
#!/bin/bash

/usr/bin/mysqldump .... | /usr/bin/mailx .....

Viele Grüße,
LinuxAdmin

PS: in welchem Pfad ein Programm gefunden wird verrät Dir der Befehl 'which'
Code:
which mysqldump
 
Last edited by a moderator:
Vielen Dank für die Info
Meine Datei sieht jetzt so aus!

Code:
#!/bin/bash
DATE=`date +%Y-%m-%d\ %H-%M-%S`
/usr/bin/mysqldump -u Benutzer -pPASSWD Datenbank |/usr/bin/mailx -s "SQL-Daten `date +%Y-%m-%d\ %H-%M-%S`" MailAdresse
echo "Mail wurde versand!"

Wennich sie manuell ausführe geht auch noch alles
Jetzt hab ich die Crontab so eingestellt auf 16:13 Uhr

Code:
# m h dom mon dow user  command
13 16     * * *   root    /etc/backup

Allerdings kam keine Mail an ??
Muss ich noch etwas beachten?

gruß
jogie
 
Entweder war die eingestellte Zeit zu knapp seit dem abspeichern, so dass der crond den Befehl erst morgen ausführen wird, oder sonstwas ist schief gelaufen. Inzwischen sollte Dein root-Account jede Menge Mails erhalten haben, in denen das "Mail wurde versand!" drin steht -- eine davon enthält auch die relevante Fehlermeldung, die Dir sagt, was nicht funktioniert hat.

Du solltest aliase einrichten, so dass Deine root-Mails (und postmaster und abuse) an Deine Mail-Adresse, die Du regelmäßig liest, weitergeleitet werden.
 
Hast du vielleicht ICQ wo du mir dies genauer erklären kannst? Wäre super

Die Mail die ich bekomme wenn ich die Datei manuell ausführe ist von der absender adresse wo ich mich einloge bevor ich su root mache!


gruß
jogie
 
Mit ICQ kann ich leider nicht dienen...

In der Datei /var/mail/root befinden sich die Mails, die an root gegangen sind. Du kannst entweder Dir alle auf einmal mit 'less' anschauen (ist ja schließlich nur eine gewöhnliche Datei) oder mit dem Programm mailx (ohne Parameter werden keine Mails versendet, sondern sie gelesen). Mailx kann zwar nicht viel, aber zum Lesen reicht es. Am Ende einer Mail erscheint ein '?', und man kann dann mit 'd' die Mail löschen oder mit 'n' zur nächsten Mail weitergehen. Längere Mails werden seitenweise angezeigt.

Beim manuellen Ausführen des Scripts erhälst Du Die Mail mit dem Absender-Account, da die Environment-Variable "USER" nach einem 'su' noch auf den alten Benutzer zeigt und 'mailx' die verwendet. Wenn Du ein 'su -' durchführst, werden alle Environment-Variablen umgesetzt.

Cron versendet die Ausgabe eines jeden ausgeführten Befehls (allerdings auch nur wenn der eine Ausgabe produziert) per Mail an den Besitzer (in diesem Fall root), so kannst Du raus finden was funktioniert hat und was nicht.

Die Datei /etc/aliases enthält verschieden Mail-Umleitungen nach dem Muster:
Code:
Benutzer1: lokalerEmpfänger
Benutzer2: lokalerEmpfänger1, nochjemand@gmx.de, ich@web.de
Da kannst Du auch für root eintragen, dass dessen Mails z.B. an einen Account bei einem anderen Provider geschickt werden sollen. Wenn Du die Datei verändert hast, muss sie normalerweise (je nach eingesetztem Mailprogramm) übersetzt werden. Je nach Mailprogramm geht das mit einem der folgenden Programmen
Code:
newaliases
/usr/lib/sendmail -bi
'man aliases' sagt Dir im Zweifelsfall, was Du machen musst.

Viele Grüße,
LinuxAdmin
 
/var/mail ist das Verzeichnis, in dem normalerweise die Mails abgelegt werden. Natürlich kann es sein, dass Deine Linux-Distribution ein anderes Verzeichnis verwendet (dann sollte aber 'mailx' nach einem 'su -' die Mails aber trotzdem finden). Es kann auch sein, dass die Verwaltungsoberfläche, die Du verwendest, auch die Root-Mails in einen IMAP/POP/was auch immer-Ordner ablegt, das musst Du halt selber rausfinden.
Schau Dir mal /etc/aliases an, vielleicht findest Du da bereits einen Hinweis darauf, was mit den Mails geschieht; ansonsten müsstest Du Dir die restliche Konfiguration Deines Mailsystems anschauen oder zumindest mal in den Mail-Logdateien nachverfolgen, welchen Weg eine Mail an root geht, die Du auf der Console abgeschickt hast.

Viele Grüße,
LinuxAdmin
 
Back
Top