#1 Le 11/01/2022, à 09:04
- airvb
bash et lancement de script
Bonjour ,
J'utilise munin pour surveiller quelques bricoles.
Il est possible de lancer un script lorsqu’un paramètre dérive.
Ds le fichier de confg de munin c'est cette ligne qui lance l'envoi d'un mail lorsque le message d'erreur comporte WARNING.
contact.warn.command bash -c "cat > /tmp/muninmail.txt; if grep -q WARNING /tmp/muninmail.txt; then cat /tmp/muninmail.txt | mail -s 'WARNING for ${var:group} :: ${var:host}' airvb@monmail.fr; fi"
Ceci fonctionne bien, le contenu du message d'alerte est de le corps du mail envoyé.
Pour avoir une alerte par SMS lorsque le niveau d'alerte est CRITICAL, j'ai un script python que je dois lancer comme ceci
sms.py "texte de l'alerte" +33xxxxx
ex :
sms.py " truc machin chose " +33xxxxxx
ou
sms.py truc_machin_chose +33xxxxxx
J'essaie donc d'avoir le message d'alerte ds le sms en passant par un fichier txt .
J'ai donc tenté pas mal de chose sans réussir. Le contenu du message d'alerte comportant des espaces, cela n'est pas bien interprété par le script python.
ex foireux :
contact.warn.command bash -c "cat > /tmp/muninmail.txt; if grep -q WARNING /tmp/muninmail.txt; then /home/airvb/envoisms/sms.py '$(cat /tmp/muninmail.txt)' +336xxxx"; fi"
le fichier txt est bien créé, mais le script python ne se lance pas
contact.warn.command bash -c "cat > /tmp/muninmail.txt; if grep -q WARNING /tmp/muninmail.txt; then bash -c '/home/airvb/envoisms/sms.py "$(cat /tmp/muninmail.txt)" +336xxxxx'; fi"
sachant que si je lance ceci en cli ,
/home/airvb/envoisms/sms.py "$(cat /tmp/muninmail.txt | sed -e 's/ /_/g')" +336xxxxxx
ca fonctionne !
J'imagine que c'est une histoire de "", ' mais je n'arrive pas à trouver la bonne syntaxe
Des idées ?
Merci
Dernière modification par airvb (Le 11/01/2022, à 09:10)
Hors ligne
#2 Le 11/01/2022, à 09:44
- iznobe
Re : bash et lancement de script
Bonjour , je ne suis pas certain , mais cette partie de commande selon toi que fait elle ?
bash -c '/home/airvb/envoisms/sms.py ....
Selon moi tu demandes a bash de lancer un script python , si c ' est bien le cas , je ne vois pas comment ca pourrait fonctionner .
essaie donc de remplacer "bash -c" par "python" . pour lancer l' execution du script python .
Ce qui donne :
contact.warn.command bash -c "cat > /tmp/muninmail.txt; if grep -q WARNING /tmp/muninmail.txt; then python '/home/airvb/envoisms/sms.py "$(cat /tmp/muninmail.txt)" +336xxxxx'; fi"
Pour la syntaxe des " et ' , je te laisse gerer cela
Dernière modification par iznobe (Le 11/01/2022, à 09:53)
retour COMPLET et utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#3 Le 12/01/2022, à 07:31
- airvb
Re : bash et lancement de script
Bonjour , je ne suis pas certain , mais cette partie de commande selon toi que fait elle ?
bash -c '/home/airvb/envoisms/sms.py ....
Selon moi tu demandes a bash de lancer un script python , si c ' est bien le cas , je ne vois pas comment ca pourrait fonctionner .
essaie donc de remplacer "bash -c" par "python" . pour lancer l' execution du script python .
Ce qui donne :
contact.warn.command bash -c "cat > /tmp/muninmail.txt; if grep -q WARNING /tmp/muninmail.txt; then python '/home/airvb/envoisms/sms.py "$(cat /tmp/muninmail.txt)" +336xxxxx'; fi"
Pour la syntaxe des " et ' , je te laisse gerer cela
Et bien sur suis je bête ...
Alors je tente :
contact.warn.command bash -c "cat > /tmp/muninmail.txt; if grep -q WARNING /tmp/muninmail.txt; then python3 '/home/airvb/envoisms/sms.py "$(cat /tmp/muninmail.txt)" +336xxxx'; fi"
ou
contact.warn.command bash -c "cat > /tmp/muninmail.txt; if grep -q WARNING /tmp/muninmail.txt; then python3 "/home/airvb/envoisms/sms.py '$(cat /tmp/muninmail.txt)' +336xxxx; fi"
Ne passent pas...
J'ai vérifié que :
sudo -u munin python3 /home/airvb/envoisms/sms.py "$(cat /tmp/muninmail.txt)" +336xxxx
fonctionne, et oui cela fonctionne.
Une idée ?
Hors ligne
#4 Le 12/01/2022, à 07:47
- iznobe
Re : bash et lancement de script
J'ai vérifié que :
sudo -u munin python3 /home/airvb/envoisms/sms.py "$(cat /tmp/muninmail.txt)" +336xxxx
fonctionne, et oui cela fonctionne.
Une idée ?
Bonjour , sans sudo le script pyhton ne se lance pas ?
Plutot que de partir a taton , il vaut mieux passer en mode terminal et lancer le script via le terminal pour avoir les retours , ce qui permettra de corriger :
on se replace dans le repertoire home
cd ~
on cree un fichier :
nano send.sms.sh
dans lequel on y met :
#!/bin/bash
tel="+336xxxx"
contenu=/tmp/muninmail.txt
contact.warn.command bash -c cat > /tmp/muninmail.txt
if grep -q WARNING /tmp/muninmail.txt ; then
echo "envoi SMS"
python3 /home/airvb/envoisms/sms.py "$contenu" "$tel";
fi
ensuite on rend le fichier executable :
chmod +x send.sms.sh
et on lance le fichier dans le terminal pour visualiser les retours :
./send.sms.sh
Dernière modification par iznobe (Le 12/01/2022, à 08:24)
retour COMPLET et utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#5 Le 12/01/2022, à 10:24
- airvb
Re : bash et lancement de script
Merci pour ton retour ,
Je me suis mal exprimé.
L'envoi de sms fonctionne bien.
Ds le terminal le lancement de :
sudo -u munin python3 /home/airvb/envoisms/sms.py "$(cat /tmp/muninmail.txt)" +336xxxx
est OK.
le sudo, c'est pour être sur que cela fonctionne bien lorsque c'est le pgm munin qui exécute.
L'argument du contenu doit être entre "" car il comporte des espaces.Sinon cela ne fonctionne pas.
Le problème c'est que la commande que munin envoi est paramétrée ds un fichier de conf dont la syntaxe est
contact.crit.command etc ....
Le genre de commande qui fonctionne :
contact.crit.command /home/airvb/envoisms/sms.py "Munin" +336xxxxxx
ou bien :
contact.warn.command bash -c "cat > /tmp/muninmail.txt; if grep -q WARNING /tmp/muninmail.txt; then cat /tmp/muninmail.txt | mail -s 'WARNING for ${var:group} :: ${var:host}' email@mail.com; fi"
Permet d'envoyer le mail si le contenu contient WARNING
Ce que je n'arrive pas à faire c'est de passer comme argument au script python le contenu généré par cat > /tmp/muninmail.txt
pour info le muninmail.txt
VB-zorin :: VB-zorin :: Disk usage in percent
WARNINGs: / is 28.08 (outside range [:10]).
OKs: /media/Partage-vb is 56.82.
Merci encore
Hors ligne
#6 Le 12/01/2022, à 10:44
- iznobe
Re : bash et lancement de script
ok , si tu fais un copier coller de cette ligne suivi par entrée :
contenu="$(cat /tmp/muninmail.txt)"; echo "$contenu";
on est d' accord que $contenu est bien ce que tu cherches a recuperer et a envoyer par SMS ?
donc ce script est censé fonctionner :
#!/bin/bash
tel="+336xxxx";
contenu= "$(cat /tmp/muninmail.txt)"; echo "$contenu";
contact.warn.command bash -c cat > /tmp/muninmail.txt
if grep -q WARNING /tmp/muninmail.txt ; then
echo "envoi SMS";
python3 /home/airvb/envoisms/sms.py "$contenu" "$tel";
fi
tu peux tester en faisant tout simplement un copier coller du code suivant directement dans le terminal :
tel="+336xxxx";
contenu= "$(cat /tmp/muninmail.txt)"; echo "$contenu";
contact.warn.command bash -c cat > /tmp/muninmail.txt
if grep -q WARNING /tmp/muninmail.txt ; then
echo "envoi SMS";
python3 /home/airvb/envoisms/sms.py "$contenu" "$tel";
fi
Dernière modification par iznobe (Le 12/01/2022, à 10:51)
retour COMPLET et utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#7 Le 13/01/2022, à 18:56
- airvb
Re : bash et lancement de script
bsr ,
Merci pour ton aide,
J'ai contourné le problème en gérant le contenu du fichier txt par le script python d'envoi de sms
Merci encore
Hors ligne