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 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 tongue

Dernière modification par iznobe (Le 11/01/2022, à 09:53)


retour 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

iznobe a écrit :

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 tongue

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

airvb a écrit :

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 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 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