2014-04-05 10 views
13

Mam ten wiersz w crontab:Cron Job - Jak wysłać plik wyjściowy do wiadomości e-mail

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

(każda minuta tylko próbka)

Tak, wszystko działa bez zarzutu, ale e-mail pusty.

UPDATE:

Wyjście z mysql_dumb.sh plik jest *.sql i zapisać plik w katalogu.

Jak mogę wysłać kopię (* .sql plik) z tego wyjścia ->mysql_dumb.sh na mój adres e-mail?

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

jako wskazówka, można zapobiec pusty e-mail przed wysłaniem za pomocą '-E' flagę (' elektronicznej -E -s ... ') – shx2

+0

@ shx2 to nie to, co mówi -help, -E, --exec = COMMAND wykonuj COMMAND – meffect

+0

@ shx2 nevermind, potrzebowałem sudo apt-get install bsd-mailx. http://manpages.ubuntu.com/manpages/utopic/man1/bsd-mailx.1.html – meffect

Odpowiedz

34

Jeśli skrypt jest raportowanie błędów, można je będzie stderr, ale jesteś tylko przekierowanie stdout. można przekierować stderr dodając 2>&1 z poleceniem:

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

Witam .. Aktualizuję moje pytanie. To dla mnie taki sam wynik ... Pusty e-mail. – aldanux

+2

Dlaczego nie umieścisz 'cat XXX.sql' w skrypcie, aby zawartość pliku znalazła się w wiadomości e-mail? – Barmar

+0

Ok .. Dziękuję bardzo! "kot" był moim błędem! – aldanux

0

Spójrz na ostatniej linii mysql_dumb.sh: /usr/bin/mysqldump -u USER -pPASS DATABASE > /var/www/dir/backup/backup_DB_`date +%d_%m_%Y`.sql

> przekierowuje wyjście mysqldump do pliku /var/www/dir/backup/backup_DB_ date +% d_ % m_% Y .sql

Czy chcesz przechowywać lokalnie kopię zapasową bazy danych?

Jeśli nie, wyjąć z > /var/www/dir/backup/backup_DB_`date +%d_%m_%Y`.sql i umieścić wpis crontab z powrotem do

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

Jeżeli chcesz kopię pliku lokalnie, chciałbym zaproponować za pomocą tee który napisze wyjście do plik i umieść wyjście z powrotem na standardowe wyjście, które później zostanie odebrane przez crontab.

chciałbym zmienić ostatnią linię mysql_dumb.sh być: /usr/bin/mysqldump -u USER -pPASS DATABASE | tee /var/www/dir/backup/backup_DB_`date +%d_%m_%Y`.sql

Ponownie chciałbym zmienić wpis crontab powrót do: /usr/bin/mysqldump -u USER -pPASS DATABASE > /var/www/dir/backup/backup_DB_`date +%d_%m_%Y`.sql

Zaletą tutaj jest poczta może odczytać informacje z stdout i ISN jest zależne od zapisywanego pliku, a następnie odczytywany poprawnie. Chociaż może to być niewielka różnica, z mojego doświadczenia przy użyciu tee będą bardziej wiarygodne.

12

Z punktu widzenia dokładniejszego crond jest umieszczenie w cron'a:

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

to jest poprawna odpowiedź – MitchBroadhead

+0

To będzie wysyłać e-maile dla wszystkich wpisów w crontab, a nie tylko jednej linii. – jamsandwich

Powiązane problemy