web-dev-qa-db-fra.com

Cron Job - Comment envoyer un fichier de sortie à un email

J'ai cette ligne dans crontab:

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

(chaque minute seulement un échantillon)

Donc, tout fonctionne bien, mais le courrier électronique est vide.

METTRE À JOUR:

La sortie de mysql_dumb.sh est un fichier *.sql et ils enregistrent le fichier dans un répertoire.

Comment puis-je envoyer une copie (fichier * .sql) à partir de cette sortie -> mysql_dumb.sh à mon courrier électronique?

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
20
Black Sheep

Si le script rapporte des erreurs, il se peut qu’ils passent à stderr, mais vous ne faites que rediriger stdout. Vous pouvez rediriger stderr en ajoutant 2>&1 à la commande:

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

Dans une perspective plus précise, placez-vous dans votre cron:

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

Regardez la dernière ligne de mysql_dumb.sh:/usr/bin/mysqldump -u USER -pPASS DATABASE > /var/www/dir/backup/backup_DB_`date +%d_%m_%Y`.sql

Le > redirige la sortie de mysqldump vers le fichier /var/www/dir/backup/backup_DB_date +% d_% m_% Y.sql

Voulez-vous stocker une sauvegarde de la base de données localement?

Sinon, sortez le > /var/www/dir/backup/backup_DB_`date +%d_%m_%Y`.sql et remettez l'entrée crontab dans 

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

Si vous voulez une copie du fichier localement, je suggérerais d'utiliser tee qui écrira la sortie dans le fichier et la restituera sur stdout, qui sera ensuite récupérée par crontab.

Je voudrais changer la dernière ligne de mysql_dumb.sh pour être: /usr/bin/mysqldump -u USER -pPASS DATABASE | tee /var/www/dir/backup/backup_DB_`date +%d_%m_%Y`.sql

Encore une fois, je modifierais l'entrée crontab en: /usr/bin/mysqldump -u USER -pPASS DATABASE > /var/www/dir/backup/backup_DB_`date +%d_%m_%Y`.sql

L'avantage ici est que mail peut lire les informations sur stdout et ne dépend pas du fichier en cours d'écriture, puis est lu correctement. Bien que cela puisse être une petite différence, d'après mon expérience, l'utilisation du tee sera plus fiable.

2
W3t Tr3y