Arrêter cron d'envoyer du courrier pour le script de sauvegarde?

13

J'ai mis en place un script de sauvegarde pour sauvegarder toutes les heures les données du monde sur mon serveur Minecraft en utilisant cron, mais parce que les mondes sont constamment modifiés par les joueurs, tar me disait que les fichiers ont changé pendant leur lecture. J'ai ajouté --ignore-command-error au tar dans le script et cela supprime toutes les erreurs lorsque je l'exécute manuellement, mais cron envoie toujours un message électronique disant que les fichiers ont été modifiés pendant la lecture et finit par inonder mon courrier parce qu'il est courir une fois par heure. Quelqu'un sait comment réparer ceci? Voici le script:

filename=$(date +%Y-%m-%d)
cd /home/minecraft/Server/
for world in survival survival_nether survival_the_end creative superflat
do
if [ ! -d "/home/minecraft/backups/$world" ]; then
mkdir /home/minecraft/backups/$world
fi
find /home/minecraft/backups/$world -mtime +1 -delete
tar --ignore-command-error -c $world/ | nice -n 10 pigz -9 > /home/minecraft/backups/$world/$filename.tar.gz
done
Charretier
la source

Réponses:

22

Cron tentera d'envoyer un e-mail avec toute sortie qui aurait pu se produire lors de l'exécution de la commande. Depuis la page de manuel de cron:

Lors de l'exécution des commandes, toute sortie est envoyée par courrier électronique au propriétaire de la crontab (ou à l'utilisateur spécifié dans la variable d'environnement MAILTO dans la crontab, s'il en existe une). Toute sortie de travail peut également être envoyée à syslog à l'aide de l'option -s.

Donc, pour le désactiver pour une entrée crontab spécifique, il suffit de capturer toutes les sorties de commandes et de les diriger vers un fichier ou vers /dev/null.

30 * * * * notBraiamsBackup.sh >/dev/null 2>&1
slm
la source
1
D: en utilisant mon exemple!
Braiam
@Braiam - désolé, je me sentais paresseux et je n'avais pas envie de le taper. J'aurais quand même tapé la même chose 8-).
slm
@Braiam - est-ce mieux? 8-).
slm
Fonctionne très bien, exactement ce que je cherchais.
Carter
Notez que dans mon CentOS 7, avec crontabpas cron, -ssignifie selinux context.....
WesternGun
13

Au lieu de tout diriger /dev/null(ce qui peut vous laisser sans un indice de ce qui s'est passé en cas de problème), vous pouvez diriger vos scripts vers des fichiers journaux comme celui-ci:

30 * * * * backup.sh > ~/logs/backup.log

Et pour arrêter de recevoir des e-mails, définissez simplement MAILTO variable sur une chaîne vide au début de votre fichier crontab:

MAILTO=""
Enrico
la source
4

Si vous ne voulez pas de mails pour une tâche cron spécifique, vous pouvez simplement ajouter >/dev/null 2>&1à la fin de la ligne:

30 * * * * backup.sh >/dev/null 2>&1
Braiam
la source
Je choisis de cette façon: tu as tout perdu de vue, mais proprement.
WesternGun
0

Vous devez ajouter ce qui suit à votre commande gnu tar : --warning = no-file-changed

Cela supprimera tous les " messages % s: fichier modifié au fur et à mesure que nous le lisons ". Et en utilisant cette solution (et en ne redirigeant pas tout vers / dev / null), vous pourrez toujours obtenir des messages d'erreur lorsque les choses tournent vraiment mal.


Avec l' indicateur --warning , vous pouvez activer et désactiver de nombreux messages différents que tar imprime. Voici la partie pertinente du manuel avec tous les mots clés que vous pouvez utiliser: https://www.gnu.org/software/tar/manual/html_section/tar_27.html .

Remarque: en ajoutant " no- " devant un mot-clé, le message sera supprimé.

Le batelier silencieux
la source