Cron作业 - 如何将输出文件发送到电子邮件

时间:2014-04-05 21:35:56

标签: cron crontab

我在crontab中有这一行:

* * * * * /var/www/dir/sh/mysql_dumb.sh | mail -s "mysql_dump" example@mail.com

(每分钟只有一个样本)

所以,一切正常,但电子邮件是空的。

更新

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

4 个答案:

答案 0 :(得分:39)

如果脚本报告错误,则可能会转到stderr,但您只是重定向stdout。您可以通过向命令添加stderr来重定向2>&1

* * * * * /var/www/dir/sh/mysql_dump.sh 2>&1 | mail -s "mysql_dump" example@mail.example

答案 1 :(得分:31)

从一个角度来看,更准确的是放入你的cron:

MAILTO=example@mail.com
* * * * * /var/www/dir/sh/mysql_dumb.sh
* * * * * /var/www/dir/sh/other.sh
* * * * * /var/www/dir/sh/other2.sh

答案 2 :(得分:2)

查看mysql_dumb.sh的最后一行: /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" example@mail.example

如果你确实需要本地文件的副本,我建议使用tee将输出写入文件并将输出放回到stdout上,稍后将由crontab拾取。 / p>

我会将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读取信息,并且不依赖于正在写入的文件然后正确读取。虽然这可能是一个小差异,但根据我的经验,使用T恤会更可靠。

答案 3 :(得分:0)

如果您想存储您的Cron作业的输出到服务器上的文件,并且还希望将该输出文件发送到您的邮件地址,则可以使用以下命令。

您可以在cronjob上使用它来自动运行特定的时间间隔,这里我正在转储mysql db并将其发送到我的邮件中并带有转储的sql文件附件。 / p>

* * * * * mysqldump --user username --password='p@ssword' DBNAME | gzip > /home/user/db_backup/db_backup_`date +\%d-\%m-\%Y-\%H-\%M`.sql.gz && mailx -a /home/user/db_backup/db_backup_`date +\%d-\%m-\%Y-\%H-\%M`.sql.gz -s 'database backup date:'`date +\%d-\%m-\%Y-\%H:\%M` example@gmail.com