Bonjour à tous 🙂
Petit article utile et memo qui me permettra de me rappeler de ce détail important concernant le fonctionnement des “cram” sous linux ^^’
Mais qu’est ce qu’un Cram ?
Il s’agit tout simplement d’une “sorte” de spam, faite par votre système unix lors de l’exécution de cron (tâches automatiques).
Ainsi, crontab, aussi fantastiques et puissant soit cet outil natif aux os linux, inclus une fonctionnalité à la fois très pratique, mais pas tout à fait bien pensée :/
En effet, le principe est le suivant, lorsqu’une cron est éxécutée par le biais de crontab, la sortie générée par celle ci est interprétée comme un message à envoyer à son utilisateur.
Cependant, ceci inclus tout les types de sorties générées, y compris les simples “status ok” ou “validation de reload” de tel ou tel commande 😡
Ces messages sont normalement envoyés à l’utilisateur exécutant la cron, remplissant sa boite de messages, cependant, là où cela peut devenir très gênant, c’est lorsque vous avez associé à votre utilisateur linux un système de renvoi de ces messages en mail direct, tel qu’avec Exim ! (cf article pour utilisation avec Exim par ici)
Erreur type provocant un Cram
Je me suis alors retrouvé à lancer des petites cron de scripts backup, ou encore de simple cron régulier sur rechargement de serveur DNS et autre, me spammant à chaque exécution :/
Exemple avec un reload régulier d’un de mes serveurs DNS =>
This message was created automatically by mail delivery software.
A message that you sent could not be delivered to one or more of its
recipients. This is a permanent error. The following address(es) failed:
root@ksxxx.kimsufi.com
SMTP error from remote mail server after RCPT TO::
host smtp.n1-servers.fr [xxx.xxx.xxx.xxx]: 554 5.7.1 :
Relay access denied
—— This is a copy of the message, including all the headers. ——
Return-path:
Received: from root by xxx.n1-SerVerS.fr with local (Exim 4.72)
(envelope-from )
id 1UZESw-0007AO-UZ
for root@ksxxx.kimsufi.com; Mon, 06 May 2013 08:00:03 +0200
Date: Mon, 06 May 2013 08:00:02 +0200
Message-Id:
From: admin@n1-servers.fr (Cron Daemon)
To: root@ksxxx.kimsufi.com
Subject: Cron /etc/init.d/bind9 restart #Reload serveur dns : xxx.n1-servers.fr
Content-Type: text/plain; charset=ISO-8859-1
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/root>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env:
Stopping domain name service…: bind9 waiting for pid 21757 to die.
Starting domain name service…: bind9.
Comment régler ce petit soucis ?
Voyons donc voir la, plus exactement, les solutions, concernant ce bug de Cram.
En effet, il existe plusieurs moyen de ce prémunir de ces petits emails non sollicités ^^
Désactiver tout les outputs :
Pas forcément la méthode la plus “intelligente” mais surtout la plus simple, elle consiste à rajouter un bout de code en fin de commande, afin de renvoyer toute sortie générée en “null”, et ainsi ne plus avoir de sortie générée, et donc par conséquence aucun message Cram ^^
Pour ce faire, il suffit de rajouter ceci en fin de commande =>
>/dev/null 2>&1
Pour exemple, dans le cas de mon rechargement de serveur DNS, la commande complète donne donc =>
/etc/init.d/bind9 restart >/dev/null 2>&1
Désactiver les messages générées par l’application employées :
Ceci est généralement le mieux, mais ce n’est pas toujours possible, car cela dépend de l’application que vous utilisez.
En effet, certains application on un mode d’exécution “silencieux”, ainsi, en rajoutant en bout de commande l’argument faisant appel à l’exécution silencieuse, vous vous retrouvez avec des sorties générées uniquement qu’en cas d’erreur, et donc dans des cas où les Cram sont totalement légitime 🙂
Passer par une application “tampon” tel que Cronic :
Dans cette dernière solution, il suffit d’utiliser ce shell en suffixe de la commande désirée, afin que la sortie ne soit générée qu’en cas de message considéré comme erreur.
Exemple
monscriptdebackup.sh
devient
cronic monscriptdebackup.sh
Retrouver Cronic sur son site officiel http://habilis.net/cronic/
Voilà donc un petit article pour soulager quelques boites mails d’admin système recevant des cram quotidien, ou tout simplement m’aider à me remémorer comment j’ai réglé ce petit soucis ^^’