web-dev-qa-db-fra.com

sendmail avec travail cron

J'ai écrit un script et tout fonctionne si bien selon mes besoins:

a=$(df -h /mnt/smb | tail -n +3 | tr -s ' ' | tr '%' ' ' | cut -d ' ' -f 5)
echo $a

if [[ $a -ge 30 ]]; then
    cat /etc/diskspace/text.txt | sendmail test.gmail.com
fi

Je veux exécuter ce script chaque minute via Cron, voir ma crontab:

* * * * * /etc/diskspacae/vpndrive.sh

Comme vous pouvez le constater, après avoir exécuté ce script si l'espace disque est supérieur à 80%, je souhaite utiliser sendmail pour recevoir une notification dans mon courrier électronique.

Mais je ne l'ai pas eu quand j'ai exécuté ce script à partir de Cron, et j'ai ce message d'erreur dans /var/spool/mail/root.

ERROR Message: /etc/diskspace/vpndrive.sh line 34 : sendmail: command not found. 
4
kunal

N'oubliez pas que les scripts exécutés par Cron sont exécutés dans un environnement avec une variable PATH limitée. Cela signifie que sur la console lorsque vous testez votre script, la console Shell trouvera sendmail sans problème. Mais lorsqu'il est exécuté à partir de Cron, sendmail n'est pas trouvé.

La meilleure pratique pour écrire des scripts pour Cron est de mettre le chemin complet pour accéder à la commande que vous voulez exécuter, juste pour être sûr.

Généralement, le fichier binaire sendmail est installé sous /usr/sbin, un chemin ne faisant pas partie des répertoires recherchés par défaut par Cron. Je conseillerais donc de:

  1. Recherchez l'emplacement de sendmail binary (locate sendmail ou find / -type f -name sendmail) si locate n'est pas installé)
  2. Notez le chemin complet à exécuter sendmail dans votre script
12
Benoit

Très probablement, sendmail n'est pas installé.

Pour l'installer, tapez Sudo apt-get install sendmail dans le terminal.

Pour plus de détails sur la configuration, visitez la même question: comment configurer sendmail sur Ubuntu?

1
Roomy