#1 Le 29/11/2017, à 13:27
- JujuLand
[Résolu] crontab, ethernet, mail et user
[Résolu] Bonjour, j'utilise le script suivant :
#!/bin/bash
if test -z $MAINTENANCE;then
export MAINTENANCE=<mon mail>
fi
if test -z $USER;then
export UTIL=alain
else
export UTIL=$USER
fi
. $(which myipl)
. $(which myipp)
echo "##2 ;$UTIL@$(hostname) ;$(date +'%Y-%m-%d %k:%M') ;$PUBLIC_IP4 ;$PUBLIC_IP6 ;$LOCAL_IP" |mail -s "@@$UTIL@$(hostname) $(date +'%Y-%m-%d %k:%M')" $MAINTENANCE
L'autre erreur, toujours avec l'envoi par le cron, sur deux ordis (l'un sous ubuntu 14.04 et l'autre sous xubuntu 16.04), l'adresse ip locale n'est pas envoyée:
Le cas ou UTIL est forcé à une valeur sert lorsque l'ordi est allumé, mais que la connexion au user n'est pas faite (quand on est à la mire d'accueil), et dans ce cas, j'utilise le cron
Dans le cas de connexion, pas de problème, tout est ok.
Quand l'utilisateur n'est pas connecté, le cron prends la relève et execute le script précédent
30 8 * * * MAILTO="" /usr/local/bin/sendipp
30 20 * * * MAILTO="" /usr/local/bin/sendipp
Dans ce cas, le mail est bien envoyé, mais j'ai deux problèmes (parfois un seul)
1) mail retourne un courriel soumettant un problème:
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:
jacques@gadel-pc2
SMTP error from remote mail server after RCPT TO:<jacques@gadel-pc2>:
host smtp.orange.fr [xx.xx.xxx.xx]: 550 5.1.1 Adresse d au moins un destinataire invalide. Invalid recipient. OFR203_418 [418]
------ This is a copy of the message, including all the headers. ------
Return-path: <xxxx@orange.fr>
Received: from jacques by gadel-pc2 with local (Exim 4.82)
(envelope-from <xxxx@orange.fr>)
id 1eJaLC-0001VH-4W
for jacques@gadel-pc2; Tue, 28 Nov 2017 08:30:02 +0100
From: root@gadel-pc2 (Cron Daemon)
To: jacques@gadel-pc2
Subject: Cron <jacques@gadel-pc2> MAILTO="" /usr/local/bin/sendipp
Content-Type: text/plain; charset=ANSI_X3.4-1968
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/home/jacques>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=jacques>
Message-Id: <E1eJaLC-0001VH-4W@gadel-pc2>
Date: Tue, 28 Nov 2017 08:30:02 +0100
** (process:5750): WARNING **: Could not create object for /org/freedesktop/NetworkManager/Settings/0: No session found for uid 1000 (unknown)
** (process:5750): WARNING **: handle_property_changed: failed to update property 'available-connections' of object type NMDeviceEthernet.
** (process:5750): WARNING **: error: cannot retrieve connection: No session found for uid 1000 (unknown)
Comment éviter l'envoi de ce mail ?
L'autre erreur qui survient aussi en utilisation du cron concerne deux ordis uniquement, l'un sous ubuntu 14.04 et l'autre sous xubuntu 16.04, pour le script de récupération de l'adresse ip locale:
#!/bin/bash
export LOCAL_IP=$(ifconfig eth0|grep 192 |cut -d: -f2 | awk '{print $1}')
if [ "$LOCAL_IP" = "" ]
then
sleep 2
export LOCAL_IP=$(ifconfig wlan0|grep 192 |cut -d: -f2 | awk '{print $1}')
fi
echo $LOCAL_IP
L'adresse ip locale dans le cas du cron, n'est pas trouvée.
Concernant l'ordi sous ubuntu 14.04, j'ai un second ordi aussi sous le même système et sur le même site distant, et pas de problème.
Concernant l'ordi sous xubuntu 16.04, çà fonctionnait avant sous xubuntu 14.04 en utilisant nm-tool. Mais cet outil ne semble plus exister sous 16.04.
Voila
Merci de vos commentaires.
A+
Dernière modification par JujuLand (Le 30/11/2017, à 10:53)
Xubuntu 16.04 > Dell DM061 (2007) + Dell Inspiron 531 (2008)
Xubuntu 16.04 > Asus X51L (2009) + MSI GX723 (2009)
Xubuntu 22.04 > HP 15BA048NF (2018)
Hors ligne
#2 Le 29/11/2017, à 14:51
- Watael
Re : [Résolu] crontab, ethernet, mail et user
salut,
dans les tests, si les variables ne sont pas assignées, parce que tu n'as pas mis de guillemets, c'est la chaîne -z qui sera testée, et elle sera toujours vraie.
ensuite, cron s'exécutant en arrière plan, la connexion, ou non, d'un utilisateur n'a aucun impact sur le déroulement des scripts appelés.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#3 Le 29/11/2017, à 18:22
- JujuLand
Re : [Résolu] crontab, ethernet, mail et user
Effectivement, aussi, j'ai modifié le test de la façon suivante:
if [ "$USER" == "root" ];then
Et là, maintenant, quand je lance la commande depuis un sudo su, donc en root, le script sendipp semble être exécuté sans erreur; mais le mail n'est pas envoyé. Pour qu'il parte, il m'a fallu assigner une adresse mail à root dans /etc/email-addresses
ensuite, cron s'exécutant en arrière plan, la connexion, ou non, d'un utilisateur n'a aucun impact sur le déroulement des scripts appelés.
Hé si, le fait d'être root a une importance, en effet, il faut systématiquement donner le chemin complet des commandes, sinon la commande n'est pas trouvée ... par exemple ifconfig qui est dans /sbin au lieu de /bin. Peut-être un problème de path pour root ... depuis un sudo su, printenv ne retourne rien. Normal, sans doute.
Bon on verra bien en utilisation réelle en cron
Donc maintenant, ça semble baigner.
Je donne le script modifié:
sendipp
#!/bin/bash
if [ "x$MAINTENANCE" == "x" ];then
export MAINTENANCE=alain.aupeix@wanadoo.fr
fi
if [ "$USER" == "root" ];then
export MAINTENANCE=<mon mail>
export UTIL=htn
export LOCAL_IP=$(/sbin/ifconfig eth0|grep 192 |cut -d: -f2 | awk '{print $1}')
export PUBLIC_IP4=$(curl -4 icanhazip.com 2>/dev/null)
export PUBLIC_IP6=$(curl -6 icanhazip.com 2>/dev/null)
echo $LOCAL_IP
echo $PUBLIC_IP4
echo $PUBLIC_IP6
else
export UTIL=$USER
. $(which myipl)
. $(which myipp)
fi
echo "##2 ;$UTIL@$(hostname) ;$(date +'%Y-%m-%d %k:%M') ;$PUBLIC_IP4 ;$PUBLIC_IP6 ;$LOCAL_IP" |/usr/bin/mail -s "@@$UTIL@$(hostname) $(date +'%Y-%m-%d %k:%M')" $MAINTENANCE
Je suis en train de penser que appelant directement myipl et myipp avec les chemins spécifiés et plus simplement les noms de scripts, ça devrait fonctionner et simplifier le script.
A+
Dernière modification par JujuLand (Le 29/11/2017, à 18:23)
Xubuntu 16.04 > Dell DM061 (2007) + Dell Inspiron 531 (2008)
Xubuntu 16.04 > Asus X51L (2009) + MSI GX723 (2009)
Xubuntu 22.04 > HP 15BA048NF (2018)
Hors ligne
#4 Le 29/11/2017, à 18:29
- JujuLand
Re : [Résolu] crontab, ethernet, mail et user
En fait, pas besoin de prefixer, car $(which script) le fait, mais pour assurer, il me faut probablement préfixer dans les deux scripts.
A+
Dernière modification par JujuLand (Le 29/11/2017, à 18:29)
Xubuntu 16.04 > Dell DM061 (2007) + Dell Inspiron 531 (2008)
Xubuntu 16.04 > Asus X51L (2009) + MSI GX723 (2009)
Xubuntu 22.04 > HP 15BA048NF (2018)
Hors ligne
#5 Le 29/11/2017, à 18:57
- JujuLand
Re : [Résolu] crontab, ethernet, mail et user
Bon, j'ai simplifié:
sendipp
#!/bin/bash
if [ "x$USER" == "xroot" ] || [ "x$MAINTENANCE" == "x" ];then
export MAINTENANCE=alain.aupeix@wanadoo.fr
export UTIL=htn
else
export UTIL=$USER
fi
. $(which myipl)
. $(which myipp)
echo "##2 ;$UTIL@$(hostname) ;$(date +'%Y-%m-%d %k:%M') ;$PUBLIC_IP4 ;$PUBLIC_IP6 ;$LOCAL_IP" |/usr/bin/mail -s "@@$UTIL@$(hostname) $(date +'%Y-%m-%d %k:%M')" $MAINTENANCE
et myipp
#!/bin/bash
export PUBLIC_IP4=$(/usr/bin/curl -4 icanhazip.com 2>/dev/null)
echo $PUBLIC_IP4
export PUBLIC_IP6=$(/usr/bin/curl -6 icanhazip.com 2>/dev/null)
echo $PUBLIC_IP6
et myipl
#!/bin/bash
export LOCAL_IP=$(/sbin/ifconfig eth0|grep 192 |cut -d: -f2 | awk '{print $1}')
if [ "$LOCAL_IP" = "" ]
then
sleep 2
export LOCAL_IP=$(/sbin/ifconfig wlan0|grep 192 |cut -d: -f2 | awk '{print $1}')
fi
echo $LOCAL_IP
A+
Xubuntu 16.04 > Dell DM061 (2007) + Dell Inspiron 531 (2008)
Xubuntu 16.04 > Asus X51L (2009) + MSI GX723 (2009)
Xubuntu 22.04 > HP 15BA048NF (2018)
Hors ligne
#6 Le 29/11/2017, à 23:23
- JujuLand
Re : [Résolu] crontab, ethernet, mail et user
Le fait depuis le cron d'appeler un script depuis un autre, même avec le . devant ne permet pas d'exporter les variables. Aussi, je dois utiliser les commandes directement, ce qui donne:
#!/bin/bash
if [ "x$USER" == "xroot" ] || [ "x$MAINTENANCE" == "x" ];then
export MAINTENANCE=<mon mail>
export UTIL=gadel
export LOCAL_IP=$(/sbin/ifconfig eth0|grep 192 |cut -d: -f2 | awk '{print $1}')
export PUBLIC_IP4=$(/usr/bin/curl -4 icanhazip.com 2>/dev/null)
export PUBLIC_IP6=$(/usr/bin/curl -6 icanhazip.com 2> /dev/null)
else
export UTIL=$USER
. $(which myipl)
. $(which myipp)
fi
echo "##2 ;$UTIL@$(hostname) ;$(date +'%Y-%m-%d %k:%M') ;$PUBLIC_IP4 ;$PUBLIC_IP6 ;$LOCAL_IP" |/usr/bin/mail -s "@@$UTIL@$(hostname) $(date +'%Y-%m-%d %k:%M')" $MAINTENANCE
A+
Xubuntu 16.04 > Dell DM061 (2007) + Dell Inspiron 531 (2008)
Xubuntu 16.04 > Asus X51L (2009) + MSI GX723 (2009)
Xubuntu 22.04 > HP 15BA048NF (2018)
Hors ligne
#7 Le 30/11/2017, à 10:53
- JujuLand
Re : [Résolu] crontab, ethernet, mail et user
Bon, c'est ok maintenant.
Le problème des infos manquantes était dû à la nécessite dans le cron de spécifier le chemin complet des scripts et commandes.
Le problème de mail venait du fait que j'affichais les valeurs des variables, et lors de l'utilisation du cron, les sorties écran sont envoyées par mail à root. Ce qui n'était d'aucune utilité (l'affichage) et ne plaisait pas du tout au serveur smpt qui voyait une adresse mail incorrrecte (root@<hostname>.
A+
Xubuntu 16.04 > Dell DM061 (2007) + Dell Inspiron 531 (2008)
Xubuntu 16.04 > Asus X51L (2009) + MSI GX723 (2009)
Xubuntu 22.04 > HP 15BA048NF (2018)
Hors ligne