2014-04-05 6 views
13

Ich habe diese Zeile in crontab senden:Cron Job - Wie eine Ausgabedatei an eine E-Mail

* * * * * /var/www/dir/sh/mysql_dumb.sh | mail -s "mysql_dump" [email protected] 

(jede Minute nur eine Probe)

Also, alles funktioniert gut, aber die E-Mail ist leer.

UPDATE:

Die Ausgabe von mysql_dumb.sh ist eine *.sql Datei und sie speichern Sie die Datei in einem Verzeichnis.

Wie kann ich eine Kopie (* .sql Datei) von dieser Ausgabe ->mysql_dumb.sh an meine E-Mail senden?

mysql_dumb.sh:

#!/bin/bash 
PATH=/usr/bin:/bin 
SHELL=/bin/bash 
/usr/bin/mysqldump -u USER -pPASS DATABASE > /var/www/dir/backup/backup_DB_`date +%d_%m_%Y`.sql 
+1

als Tipp, können Sie von leeren E-Mail verhindern gesendet werden, durch die '-E' Flag verwendet (' mail -E -s ... ') – shx2

+0

@ shx2 das ist nicht, was die --help sagt, -E, --exec = COMMAND execut COMMAND – meffect

+0

@ shx2 verpasste, ich musste sudo apt-get installieren bsd-mailx. http://manpages.ubuntu.com/manpages/utopic/man1/bsd-mailx.1.html – meffect

Antwort

34

Wenn das Skript Fehler berichten wird, kann sie zu stderr gehen werden, aber du bist nur stdout umleitet. Sie können stderr umleiten, indem 2>&1 auf den Befehl hinzufügen:

* * * * * /var/www/dir/sh/mysql_dump.sh 2>&1 | mail -s "mysql_dump" [email protected] 
+0

Hallo .. Ich aktualisiere meine Frage. Es ist das gleiche Ergebnis für mich ... Eine leere E-Mail. – aldanux

+2

Warum setzen Sie 'cat XXX.sql' nicht in das Skript, damit der Inhalt der Datei in der E-Mail enthalten ist? – Barmar

+0

Ok .. Vielen Dank! 'Katze' war mein Fehler! – aldanux

0

Blick auf die letzte Zeile von mysql_dumb.sh: /usr/bin/mysqldump -u USER -pPASS DATABASE > /var/www/dir/backup/backup_DB_`date +%d_%m_%Y`.sql

Die > wird Umlenken der Ausgabe von mysqldump in die Datei /var/www/dir/backup/backup_DB_ date +% d_ % m_% Y .sql

Möchten Sie eine Sicherung der Datenbank lokal speichern?

Wenn nicht, nehmen Sie die die > /var/www/dir/backup/backup_DB_`date +%d_%m_%Y`.sql und die crontab Eintrag

* * * * * /var/www/dir/sh/mysql_dump.sh 2>&1 | mail -s "mysql_dump" [email protected]

setzen Wenn Sie eine Kopie der Datei lokal wollen, würde ich vorschlagen tee mit denen die Ausgabe schreiben, wird die Datei und setze die Ausgabe wieder auf stdout, die später von Crontab abgeholt wird.

würde ich die letzte Zeile der mysql_dumb.sh ändern zu sein: /usr/bin/mysqldump -u USER -pPASS DATABASE > /var/www/dir/backup/backup_DB_`date +%d_%m_%Y`.sql

Der Vorteil hierbei ist, Mail kann von stdout und isn die Informationen lesen: /usr/bin/mysqldump -u USER -pPASS DATABASE | tee /var/www/dir/backup/backup_DB_`date +%d_%m_%Y`.sql

Wieder würde ich den crontab-Eintrag ändern zurück hängt nicht davon ab, dass die Datei geschrieben und dann korrekt gelesen wird. Obwohl das ein kleiner Unterschied sein kann, wird meiner Meinung nach die Verwendung von Tee zuverlässiger sein.

12

Aus crond Perspektive ist genauer auf Ihre cron zu platzieren:

[email protected] 
* * * * * /var/www/dir/sh/mysql_dumb.sh 
* * * * * /var/www/dir/sh/other.sh 
* * * * * /var/www/dir/sh/other2.sh 
+2

das ist die richtige Antwort – MitchBroadhead

+0

Dies wird E-Mails für alle Einträge in der Crontab, nicht nur die eine Zeile senden. – jamsandwich