Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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

Wataei a écrit :

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