2014-04-05 21 views
13

我此行的crontab:定時任務 - 如何將輸出文件發送到電子郵件

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

(每分鐘只樣本)

所以,一切工作正常,但電子郵件空。

UPDATE:

從mysql_dumb.sh的輸出是一個*.sql文件,他們將文件保存在目錄中。

如何從此輸出發送副本(* .sql文件) - >mysql_dumb.sh到我的電子郵件?

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

作爲小費,可以防止空的電子郵件被髮送,通過'-E'標誌('郵件-E -s ...') – shx2

+0

@ shx2那不是--help所說的,-E,--exec = COMMAND執行命令 – meffect

+0

@ shx2從不知道,我需要sudo apt-get install bsd-mailx。 http://manpages.ubuntu.com/manpages/utopic/man1/bsd-mailx.1.html – meffect

回答

34

如果腳本報告錯誤,他們可能會去stderr,但你只能重定向stdout

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

嗨..我更新我的問題。這對我來說也是一樣的結果......一封空郵件。 – aldanux

+2

爲什麼不在腳本中放入'cat XXX.sql',以便該文件的內容將包含在電子郵件中? – Barmar

+0

好的..非常感謝! '貓'是我的錯! – aldanux

0

看mysql_dumb.sh的最後一行::您可以通過添加2>&1到命令重定向stderr /usr/bin/mysqldump -u USER -pPASS DATABASE > /var/www/dir/backup/backup_DB_`date +%d_%m_%Y`.sql

>被重定向的mysqldump輸出到文件/var/www/dir/backup/backup_DB_日期+%D_ %m_%Y .sql

是否要在本地存儲數據庫備份?

如果沒有,取出的> /var/www/dir/backup/backup_DB_`date +%d_%m_%Y`.sql並把crontab條目回

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

如果你想在本地的文件的副本,我會建議使用tee將輸出寫入到該文件並將輸出放回到stdout,稍後將由crontab提取。

我會改變的mysql_dumb.sh最後一行是: /usr/bin/mysqldump -u USER -pPASS DATABASE | tee /var/www/dir/backup/backup_DB_`date +%d_%m_%Y`.sql

我要再次改變crontab條目回: /usr/bin/mysqldump -u USER -pPASS DATABASE > /var/www/dir/backup/backup_DB_`date +%d_%m_%Y`.sql

這裏的優勢是郵件可以從stdout和ISN讀取信息取決於正在寫入的文件,然後正確讀取。雖然這可能是一個小的差異,但根據我的經驗,使用T恤會更可靠。

12

從crond的角度更準確的是在放置到你的cron:

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

這是正確答案 – MitchBroadhead

+0

這將發送crontab中所有條目的電子郵件,而不僅僅是一行。 – jamsandwich

相關問題