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 и не зависит от записываемого файла и затем правильно читать. Хотя это может быть небольшой разницей, мой опыт использования тройника будет более надежным.