我在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
答案 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