2014-04-05 20 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

相关问题