Cron Job - How to send an output file to an email

2020-02-08 04:01发布

I have this line in crontab:

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

(every minute only a sample)

So, all works fine, but the email is empty.

UPDATE:

The output from mysql_dumb.sh is a *.sql file and they save the file in a directory.

How can I send a copy (*.sql file) from this output -> mysql_dumb.sh to my email?

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

标签: cron crontab
3条回答
smile是对你的礼貌
2楼-- · 2020-02-08 04:20

Look at the last line of mysql_dumb.sh: /usr/bin/mysqldump -u USER -pPASS DATABASE > /var/www/dir/backup/backup_DB_`date +%d_%m_%Y`.sql

The > is redirecting the output of mysqldump to the file /var/www/dir/backup/backup_DB_date +%d_%m_%Y.sql

Do you want to store a backup of the database locally?

If not, take out the the > /var/www/dir/backup/backup_DB_`date +%d_%m_%Y`.sql and put the crontab entry back to

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

If you do want a copy of the file locally, I would suggest using tee which will write the output to the file and put the output back out on stdout, which will later be picked up by crontab.

I would change the last line of mysql_dumb.sh to be: /usr/bin/mysqldump -u USER -pPASS DATABASE | tee /var/www/dir/backup/backup_DB_`date +%d_%m_%Y`.sql

Again I would change the crontab entry back to: /usr/bin/mysqldump -u USER -pPASS DATABASE > /var/www/dir/backup/backup_DB_`date +%d_%m_%Y`.sql

The advantage here is mail can read the information from stdout and isn't dependent on the file being written and then read correctly. While that may be a small difference, in my experience using tee will be more reliable.

查看更多
Animai°情兽
3楼-- · 2020-02-08 04:25

From a crond perspective more accurate is to place in to your cron:

MAILTO=example@mail.com
* * * * * /var/www/dir/sh/mysql_dumb.sh
* * * * * /var/www/dir/sh/other.sh
* * * * * /var/www/dir/sh/other2.sh
查看更多
时光不老,我们不散
4楼-- · 2020-02-08 04:27

If the script is reporting errors, they may be going to stderr, but you're only redirecting stdout. You can redirect stderr by adding 2>&1 to the command:

* * * * * /var/www/dir/sh/mysql_dump.sh 2>&1 | mail -s "mysql_dump" example@mail.example
查看更多
登录 后发表回答