Cron Job - Как отправить выходной файл на адрес электронной почты

У меня есть эта строка в crontab:

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

(каждую минуту только образец)

Итак, все работает нормально, но электронная почта пуста.

ОБНОВИТЬ:

Результат 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

Если скрипт сообщает об ошибках, они могут идти в stderr, но вы только перенаправляете stdout. Вы можете перенаправить stderr, добавив 2>&1 к команде:

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

Ответ 2

С точки зрения кроула более точной является установка в ваш cron:

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

Ответ 3

Посмотрите на последнюю строку 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_ date +% d_% m_% Y .sql

Вы хотите сохранить резервную копию базы данных локально?

Если нет, выньте >/var/www/dir/backup/backup_DB_'date +%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 /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 и не зависит от записываемого файла и затем правильно читать. Хотя это может быть небольшой разницей, мой опыт использования тройника будет более надежным.